私の CakePHP アプリケーションには、他のユーザーと友達になれるユーザーがいます。
これは、users
テーブルとfriends_users
次の列を持つテーブルで行われます:id, user_id, friend_id, status
リレーションシップ。
したがって、ユーザー ID 1 がユーザー ID 2 の友達である場合、user_id 列に 1 があり、friend_id 列に 2 があります。
User のモデルは次のようになります。
public $hasAndBelongsToMany = array(
'Friend'=>array(
'className' => 'User',
'joinTable' => 'friends_users',
'foreignKey' => 'user_id',
'associationForeignKey' => 'friend_id'
)
);
ユーザー 1 を表示すると、正常に動作し、ユーザー 2 が友達として表示されます。しかし、ユーザー 2 を表示すると、ユーザー 1 が友達として表示されません。逆に表示すると、データがいっぱいになりません。
ユーザーの友達をリストするために使用する方法は次のとおりです。
$user = $this->User->find('first', array(
'conditions' => array('User.id' => $this->Auth->user('id')),
'contain'=>'Profile'
));
$friends = $this->User->find('first',
array(
'conditions'=>array(
'User.id'=>$user['User']['id']
),
'contain'=>array(
'Profile',
'Friend'=>array(
'Profile',
'conditions'=>array(
'FriendsUser.status'=>1
)
)
)
)
);
$this->set('friends', $friends);
なぜこれが起こっているのですか?私はドキュメントに目を通しましたが、すべて問題ないようです。
理想的には、他のリソースを指摘されるのではなく、自分のコードを修正したいのです!
ページのクエリ: http://pastebin.com/zQnBVM2X