我做下一个查询:
$this->find('all',array(
'contain' => array(
'User' => array('id','facebook_id','name','username','Author' => array('first_name','last_name','code','photo')),
'Tab.code'
),
'fields' => array('Comment.date','Comment.time','Comment.content'),
'conditions' => array(
'Tab.code' => $code
),
'limit' => $limit,
'offset' => $offset
));
注释...
public $belongsTo = array(
'User' => array('foreignKey' => 'user_id'),
'Tab' => array('foreignKey' => 'tab_id')
);
用户...
public $hasOne = array('Author' => array('foreignKey' => 'id'));
和作者......
public $belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'id'
)
);
返回类似这样的内容(在json中)......
[
{
"Comment": {
"date": "2001-12-15",
"time": "17:32:12",
"content": "..."
},
"User": {
"id": "29",
"facebook_id": "1234",
"name": "User 29",
"username": "user29"
},
"Tab": {
"code": "llibre-de-prova-29",
"id": "229"
}
}
...
]
...虽然我希望附加到User的用户看起来是我指定的字段的作者。你知道为什么作者不出现吗?我做了其他包含代码的两级递归,并且所有工作都按预期工作。
感谢您的帮助和关注!
答案 0 :(得分:0)
您需要在“字段”键中指定字段。将其视为额外的find()
电话。
$this->find('all', array(
'contain' => array(
'User' => array(
'fields' => array('id','facebook_id','name','username'),
'Author' => array(
'fields' => array('first_name','last_name','code','photo')
),
'Tab.code'
),
),
'fields' => array('Comment.date','Comment.time','Comment.content'),
'conditions' => array(
'Tab.code' => $code
),
'limit' => $limit,
'offset' => $offset
));
答案 1 :(得分:0)
确保您的模型附加了Containable行为。它应包括以下行:
$actsAs = array('Containable');
注意确保你没有省略""在"行为"这是一个很难发现的常见错字。您也可以像这样附加可包含的行为:
$this->YourModel->Behaviors->attach('Containable');
$this->YourModel->find('all', array('contain' => array(...)));
还要确保键入"包含"作为数组键,不是"包含"。
答案 2 :(得分:0)
$this->find('all',array(
'contain' => array(
'User' => array('id','facebook_id','name','username','Author' =>array( 'AuthorModelName'=>array('first_name','last_name','code','photo'))),
'Tab.code'
),
答案 3 :(得分:0)
所有外键必须在您的字段数组
中'fields' => array('Comment.date','Comment.time','Comment.content', 'Comment.user_id', ....)