ユーザー、プロファイル、友達の 3 つのテーブルがあります。
それらは次のように接続されています。
public $name = 'User';
public $hasOne = 'Profile';
public $hasMany = array(
'Post',
'Answer'
);
public $hasAndBelongsToMany = array(
'User'=>array(
'className' => 'User',
'joinTable' => 'friends',
'foreignKey' => 'user_from',
'associationForeignKey' => 'user_to'
)
);
プロファイル モデルは所属するユーザーにすぎないため、ここでは示していません。友人モデルは、ユーザー モデルで関連付けを行うことによって仮想化されます。
したがって、ユーザーの友達のリストを取得します。フレンドコントローラーで次のようにユーザー名を渡します。
public function index( $username )
{
$friends = $this->User->find('first',
array(
'conditions'=>array(
'User.username'=>$username
),
'contain'=>array(
'Profile',
'Friend'=>array(
'conditions'=>array(
'Friend.status'=>1
),
'contain'=>'Profile'
)
)
)
);
$this->set('friends', $friends);
}
友達のデータとそこに関連付けられているプロファイル情報を取得する必要があります。
ただし、このエラーが発生します。Model "Friend" is not associated with model "Profile" [APP/Cake/Model/Behavior/ContainableBehavior.php, line 339]
何かが正しく機能していません...
誰でも助けることができますか?
モデルで he hasAndBelongsToMany の名前を Friends に変更しようとしましたが、テーブルが一意ではないというエラーがスローされるため、それも解決策ではありません。
テーブル:
**users**
id
username
password
**profiles**
id
name
user_id
**friends**
id
user_from
user_to
status
モデルを次のように変更すると:
public $hasAndBelongsToMany = array(
'Friend'=>array(
'className' => 'Friend',
'joinTable' => 'friends',
'foreignKey' => 'user_from',
'associationForeignKey' => 'user_to'
)
);
次に、次のエラーが表示されます。
Database Error
Error: SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 'Friend'
SQL Query: SELECT `Friend`.`id`, `Friend`.`user_from`, `Friend`.`user_to`, `Friend`.`created`, `Friend`.`status`, `Friend`.`id`, `Friend`.`user_from`, `Friend`.`user_to`, `Friend`.`created`, `Friend`.`status` FROM `db52704_favorr`.`friends` AS `Friend` JOIN `db52704_favorr`.`friends` AS `Friend` ON (`Friend`.`user_from` = 6 AND `Friend`.`user_to` = `Friend`.`id`)