2011-02-06 28 views
1

私のアプリケーションには簡単な機能が追加されていますが、いくつかの調査では、ユーザーテーブルに戻るための結合テーブルが必要ですか?このような何か:(私はすでに、ユーザーテーブルを持っている)CakePHPにフレンド機能を追加する

ユーザー・友情・ユーザー

は、誰もがこのことについての詳細を与えることができますか?

答えて

3

友情テーブルには、次のカラムが必要です。

id Integer 
user_from (the user who requested friendship) 
user_to (the user who accepted friendship) 
created (optional to track when your friendship started) 

は、その後、適切なモデルの関係を作成する必要があります。

class User extends AppModel { 
    ... 
    var $hasMany = array(
     'UserFrom'=>array(
     'className'=>'Friendship', 
     'foreignKey'=>'user_from' 
    ), 
     'UserTo'=>array(
     'className'=>'Friendship', 
     'foreignKey'=>'user_to' 
    ) 
    ); 
    var $hasAndBelongsToMany = array(
     'Friendship' => array(
      'className' => 'User', 
      'joinTable' => 'friendships', 
      'foreignKey' => 'user_from', 
      'associationForeignKey' => 'user_to' 
    ); 
    ... 
} 

class Friendship extends AppModel { 
    ... 
    var $belongsTo = array(
     'UserFrom'=>array(
     'className'=>'User', 
     'foreignKey'=>'user_from' 
    ), 
     'UserTo'=>array(
     'className'=>'User', 
     'foreignKey'=>'user_to' 
    ) 
    ) 
    ... 
} 

このようにして、各モデルに2つのリレーションを定義します。 HABTM関係も追加できます。 bakeスクリプトを実行してコントローラとビューをビルドします。あなたのコードでは、次のようなものを使用することができます:

$this->User->UserFrom->find('all', 
    array(
     'conditions'=>array('user_from'=>1), 
     'contain'=>array('UserTo') 
    ) 
); 

これは、ID 1のユーザーの友人とすべての友人の詳細を返します。

再帰的クエリには注意してください。 :)

+0

うん、それは多くのように見えます。今すぐ試してみよう。ありがとう.. – woel

+0

こんにちは、HABTM関係について、私はHABTMを使用する必要はありませんか?もしそうなら、それはあなたが上に書いたモデル関係にどのような影響を与えますか?私はまだ少し混乱しています。ベーキングを実行するために、私は友情を焼くだろう私は正しいですか?あなたが上に書いた最後のコードをどこに置くべきか分かりますか?ありがとう.. – woel

+0

私はリレーションモデルでjoinTableを使用してはいけませんか? – woel

関連する問題