0

次のクエリを実行します。

        $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"
        }
    }
    ...
]

...ユーザーに添付されていると、指定したフィールドを持つ作成者が表示されることを期待しています。著者が表示されない理由を知っていますか?コードに2つのレベルの再帰性を備えた他のコンテインメントを実行しましたが、すべて期待どおりに機能します。

あなたの助けと注意をありがとう!

4

4 に答える 4

0

'fields'キーでフィールドを指定する必要があります。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
        ));
于 2012-07-26T14:39:37.037 に答える
0

モデルにContainableビヘイビアがアタッチされていることを確認してください。次の行を含める必要があります。

$actsAs = array('Containable');

見つけにくい一般的なタイプミスである「acts」の「s」を省略していないことを確認してください。次のように、Containableビヘイビアーをオンザフライでアタッチすることもできます。

$this->YourModel->Behaviors->attach('Containable');
$this->YourModel->find('all', array('contain' => array(...)));

また、配列キーとして「contains」ではなく「contain」と入力してください。

于 2012-10-17T17:00:21.927 に答える
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'
        ),
于 2013-06-10T01:55:09.727 に答える
0

すべての外部キーはfields配列に含まれている必要があります

'fields' => array('Comment.date','Comment.time','Comment.content', 'Comment.user_id', ....)
于 2014-05-16T15:15:59.640 に答える