CakePHP包含错误:两级关联不起作用

时间:2012-07-26 10:59:56

标签: cakephp containable

我做下一个查询:

        $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的用户看起来是我指定的字段的作者。你知道为什么作者不出现吗?我做了其他包含代码的两级递归,并且所有工作都按预期工作。

感谢您的帮助和关注!

4 个答案:

答案 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', ....)