我有以下型号:
用户:
注释:
网页:
配置文件:
当我检索一个页面时,我希望得到相关的评论,并且对于每个评论我想要个人资料。
我的评论表包含字段page_id和user_id。 我的个人资料表有user_id。
所以,我认为我需要做一些像
这样的事情Comment belongsTo
'Profile' => array(
'conditions' => array('Profile.user_id' => 'Comment.user_id')
)
但这不起作用 - 它返回一个空白的个人资料记录。
有人可以帮忙吗?我绕圈子走了! (使用CakePHP 2.0)
答案 0 :(得分:2)
使用CakePHP的Containable behavior [link]。基本上,这允许您选择要包含在查找中的相关模型。
您还可以指定每个模型中需要的字段,在每个模型上指定条件......等等。
看起来应该是这样的:
//PageModel
public $actsAs = array('Containable');
public function getPage($id=null) {
$this->recursive = -1; //often set to -1 in the AppModel to make -1 the default
$this->find('all', array(
'conditions' => array(
'Page.id' => $id
),
'contain' => array(
'Comment' => array(
'User' => array(
'Profile',
),
),
)
));
}
答案 1 :(得分:1)
如果正确声明了关系,则可以通过搜索所需的页面来检索所需的所有数据。但是为了限制返回的数据量,您可能必须使用te ContainableBehavior。
PageModel:
var $actsAs = array('Containable');
PagesController:
function view($id)
{
$this->Page->contain(array('Comment' => array('User', 'Profile')));
$page = $this->Page->find('first', array('conditions' => array('Page.id' => $id)));
}
修改强>
Sharon,根据您的问题,评论似乎与用户和个人资料相关联。但是,如果Profile表示“用户配置文件”,则Comment和User之间的链接就足够了,然后包含:
$this->Page->contain(array('Comment' => array('User' => array('Profile'))));