ユーザーが他のユーザーと友達になれるアプリを CakePHP で作成しました。ユーザーにはプロファイルがあり、友情は友人テーブルのユーザー ID 間でリンクされています (モデルはさらに下にあります)。
FriendsController でユーザー名を渡し、次のメソッドを使用してユーザーのフレンドを取得します。このメソッドはユーザー モデルにあり$this->User->getFriends($username);
、FriendsController で呼び出されることに注意してください。
function getFriends($username) {
//Start by getting User's ID
$user = $this->find(
'first',
array(
'conditions' => array(
'User.username' => $username
)
)
);
$profileAndFriends = $this->Profile->find(
'first', //Because User hasOne Profile, so we'll fetch this one profile.
array(
'conditions' => array(
'Profile.user_id' => $user['User']['id']
),
'contain' => array(
'UserFrom' => array(
'conditions' => array(
'status' => 1
)
),
'UserTo' => array(
'conditions' => array(
'status' => 1
)
)
)
)
);
return $profileAndFriends;
}
私のユーザーモデル:
class User extends AppModel { public $name = 'User';
public $hasOne = 'Profile';
public $hasMany = array(
'UserFrom'=>array(
'className'=>'Friend',
'foreignKey'=>'user_from'
),
'UserTo'=>array(
'className'=>'Friend',
'foreignKey'=>'user_to'
)
);
}
と私のプロファイルモデル:
class Profile extends AppModel
{
public $name = 'Profile';
public $belongsTo = 'User';
}
と Friend モデル:
class Friend extends AppModel
{
var $name = 'Friend';
public $belongsTo = array(
'UserFrom'=>array(
'className'=>'User',
'foreignKey'=>'user_from'
),
'UserTo'=>array(
'className'=>'User',
'foreignKey'=>'user_to'
)
);
}
だから私の見解では:
<?php foreach ($friends as $friend) : ?>
<?php echo $friend['UserTo']['firstname']; ?>
<?php endforeach; ?>
しかし、ファーストネームの部分が理解できません!そう...
ビューで $friend をデバッグすると、次のようになります。
array(
'Friend' => array(
'id' => '1',
'user_from' => '6',
'user_to' => '8',
'created' => '0000-00-00 00:00:00',
'status' => '1'
),
'UserFrom' => array(
'password' => '*****',
'id' => '6',
'username' => 'driz',
'email' => 'cameron@driz.co.uk',
'status' => '1',
'code' => '6d446abefc2f1214e561da6f93470621',
'lastlogin' => '2012-04-23 15:22:04',
'created' => '0000-00-00 00:00:00'
),
'UserTo' => array(
'password' => '*****',
'id' => '8',
'username' => 'testperson',
'email' => 'test@testperson.com',
'status' => '1',
'code' => '7a794859b3a16dfc005dd7f80b9ac030',
'lastlogin' => '2012-03-18 09:28:24',
'created' => '0000-00-00 00:00:00'
)
)
したがって、それは明らかにリンクされたユーザーの問題であり、プロファイルも含める必要があります...しかし、UserToとUserFrom内にcontainを配置すると、それらが関連付けられていないというエラーがスローされるため、どうすればよいですか...