2

ContainableCakePHP の動作を使用してロードしようとしているネストされたモデルがいくつかあります。そのほとんどは正常に動作します。

ただし、hasMany関係を持つ 1 つのモデルは 1 つのオブジェクトのみを返します。

$article = $this->News->find('first',array(
    'conditions'=>array('News.id'=>$id),
    'contain' =>  array(
        'Newslayout', 
        'Newspicture'=> array(
            'NewspicturesProduct' => array(
                'Product' => array(
                    'Brand',
                    'Category'
                )
        )))
    ));

一度だけロードされるオブジェクトはリレーションNewspicture hasMany NewspicturesProduct です。クエリをログに記録すると、次のようになります。

SELECT `NewspicturesProduct`.`id`, `NewspicturesProduct`.`x`, `NewspicturesProduct`.`y`, `NewspicturesProduct`.`product_id`, `NewspicturesProduct`.`newspicture_id`, `NewspicturesProduct`.`w`, `NewspicturesProduct`.`h` FROM `edclondon`.`newspictures_products` AS `NewspicturesProduct` WHERE `NewspicturesProduct`.`newspicture_id` = 3

これにより、3つの結果が得られphpMyAdminます。しかし、CakePHP のデバッグでは 1 つだけ:

'Newspicture' => array(
        (int) 0 => array(
            'id' => '3',
            'news_id' => '2',
            'newspicture_file_path' => '5022443f-ddf8-4115-ae57-618e9d60b047.jpg',
            'newspicture_file_size' => '1232546',
            'order' => null,
            'NewspicturesProduct' => array(
                'id' => '1',
                'x' => '0.180664',
                'y' => '0.295312',
                'product_id' => '3',
                'newspicture_id' => '3',
                'w' => '0.286133',
                'h' => '0.478125',
                'Product' => array(
                    'id' => '3',
                    //....
                    'Brand' => array(
                        'id' => '6',
                        //...
                    ),
                    'Category' => array(
                        'id' => '6',
                        //....
                    )
                )
            )
        )

オブジェクトを取得するNewspicturesのではなく、オブジェクトを取得すると、News3 つのオブジェクトすべてが取得されNewspicturesProductます。

4

2 に答える 2

0

あなたが示したクエリに対応するコードは次のようになります。

$article = $this->News->find('first',array(
'contain' =>  array(
    'Newslayout', 
    'Newspicture'=> array(
        'NewspicturesProduct' => array(
            'conditions'=>array('NewspicturesProduct.newspicture_id'=>'3')
            'Product' => array(
                'Brand',
                'Category'
            )
    )))
));

そして、あなたが与えたものではありません...

于 2012-08-10T17:19:40.840 に答える
-1

から3つのレコードが必要なようですNewspicturesProduct。その場合は、次のことを試すことができます。

$article = $this->News->find('first',array(
'contain' =>  array(
    'Newslayout', 
    'Newspicture'=> array(
        'NewspicturesProduct' => array(
            'conditions'=>array(
                             'limit'=> 3
                         ),
            'Product' => array(
                'Brand',
                'Category'
            )
    )))
));
于 2012-08-12T09:42:10.957 に答える