ユーザー間の友情を可能にするCakePHPアプリの次の表があります。
**Users**
id
username
password
**Profiles**
id
firstname
lastname
user_id
**Friends**
id
user_id_to
user_id_from
status
したがって、基本的にユーザーはプロファイルを持っており、ユーザーは別のユーザーと友達になることができます。これは、確認済みまたは0または1(int)を使用しないという単純なステータスでfriendsというデータベーステーブルに記録されます。つまり、友達は2人のユーザー間の結合です。
ユーザーの友達を一覧表示しようとしているので、たとえば次のようなURLを取得した場合:
/people/cameron/friends
ユーザーCameronの友達が一覧表示されます。
ただし、findステートメントでユーザーを渡し、それらを見つけて(プロファイルデータが含まれていることに注意してください)、そのユーザーに関連する友達を一覧表示するのに苦労しています。誰か助けてもらえますか?
フレンド、ユーザー、プロファイルのモデルは次のとおりです。
class Friend extends AppModel
{
public $name = 'Friend';
public $belongsTo = array('User');
public $actsAs = array('Containable');
}
User.php
class User extends AppModel
{
public $name = 'User';
public $hasOne = 'Profile';
public $hasMany = array(
'Post',
'Answer',
'Friend' => array(
'foreignKey' => 'user_id_to'
)
);
public $belongsTo = array(
'Friend' => array(
'foreignKey' => 'user_id_from'
)
);
public $actsAs = array('Containable');
public function getFriends($username)
{
return $this->find('all',
array('conditions' => array('User.username' => $username, 'Friend.status'=>1),
'contain' => array('Friend' => array('User'))
));
}
}
Profile.php
class Profile extends AppModel
{
public $name = 'Profile';
public $belongsTo = 'User';
public $actsAs = array('Containable');
}
これは、ユーザーの友達リストを表示するための私の方法です。
public function index( $username )
{
$friends = $this->User->getFriends($username);
$this->set('friends', $this->paginate());
}
現在、次のエラーが発生しています。
Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'User.user_id_from' in 'on clause'
SQL Query: SELECT `User`.`id`, `User`.`username`, `User`.`password`, `User`.`email`, `User`.`status`, `User`.`code`, `User`.`lastlogin`, `Friend`.`id`, `Friend`.`user_id_from`, `Friend`.`user_id_to`, `Friend`.`datetime`, `Friend`.`status` FROM `db52704_favorr`.`users` AS `User` LEFT JOIN `db52704_favorr`.`friends` AS `Friend` ON (`User`.`user_id_from` = `Friend`.`id`) WHERE `User`.`username` = 'cameron' AND `Friend`.`status` = 1
フレンドアソシエーション内で呼び出したにもかかわらず、アプリは外部キーがフレンドテーブルではなくユーザーテーブルにあると見なしているように見えます...問題は何ですか?