我正在尝试使用CakePHP构建Twitter克隆。我在我的模型之间建立了HABTM关系(如果我做得不对,我不是100%确定)。 我的数据库中有3个表:
我的模型设置如下:
用户模型:
<?php
class User extends AppModel {
var $name = 'User';
var $hasMany = 'Tweet';
var $hasAndBelongsToMany = array(
'Follower' => array(
'className' => 'Follower',
'joinTable' => 'relationships',
'foreignKey' => 'user_id',
'associationForeignKey' => 'follower_id'
)
);
推文型号:
<?php
class Tweet extends AppModel {
public $belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id',
'conditions' => '',
'fields' => '',
'order' => 'Tweet.created DESC'
)
);
}
关注者模型:
<?php
class Follower extends AppModel{
var $name = 'Follower';
var $useTable = 'users';
}
假设我正确设置了HABTM关联,我试图获取用户所关注的人的推文,但我不知道该查询应该是什么样子。我已经尝试了几种方法来做到这一点,但没有一种方法可行。我认为我不确定如何获得用户的以下ID。我尝试过这样的事情:$this->User->Follower->find('list');
但是我不知道我是否采取了正确的方式。谁能告诉我如何获取用户所关注的人的推文?
这将不胜感激,
谢谢。
答案 0 :(得分:1)
您应该设置您的用户模型:
<?php
class User extends AppModel {
public $name = 'User';
public $actsAs = array('Containable');
public $hasMany = array(
'Tweet'
);
public $hasAndBelongsToMany = array(
'Follower' =>
array(
'className' => 'User',
'joinTable' => 'relationships',
'foreignKey' => 'user_id',
'associationForeignKey' => 'follower_id'
)
);
}
这样做可以省去额外的追随者模型。接下来在您的控制器中尝试这样的事情:
public function followerTweets($userid) {
$this->set('user',
$this->User->find('all', array(
'contain' => array(
'Follower' => array(
'Tweet'
)
),
'conditions' => array(
'User.id' => $userid
)
)));
}
然后,您可以在视图中循环浏览指定用户的关注者的推文:
<?php
$tweets = array();
foreach ($players['0']['Follower'] as $follower):
$tweets = array_merge($follower['Tweet'], $tweets);
endforeach;
?>
这将为您提供一个如下所示的数组:
var_dump($tweets)
array
0 =>
array
'id' => string '5' (length=1)
'user_id' => string '5' (length=1)
1 =>
array
'id' => string '20' (length=2)
'user_id' => string '5' (length=1)
2 =>
array
'id' => string '6' (length=1)
'user_id' => string '4' (length=1)
3 =>
array
'id' => string '7' (length=1)
'user_id' => string '4' (length=1)
4 =>
array
'id' => string '8' (length=1)
'user_id' => string '4' (length=1)
5 =>
array
'id' => string '21' (length=2)
'user_id' => string '4' (length=1)
6 =>
array
'id' => string '22' (length=2)
'user_id' => string '4' (length=1)
7 =>
array
'id' => string '23' (length=2)
'user_id' => string '4' (length=1)
8 =>
array
'id' => string '3' (length=1)
'user_id' => string '2' (length=1)
9 =>
array
'id' => string '11' (length=2)
'user_id' => string '2' (length=1)
10 =>
array
'id' => string '18' (length=2)
'user_id' => string '2' (length=1)
11 =>
array
'id' => string '26' (length=2)
'user_id' => string '2' (length=1)