2

私には次のような団体があります

ポスト->プライマリ->セカンダリ

$results = $this->Post->find('all', array(
    'conditions' => array(
        'Post.post_id =' => 2,
        'Primary.secondary_id !=' => null
    ),
    'contain' => array(
        'Primary' => array(
            'Secondary' => array(
                'conditions' => array('Secondary.short_code =' => 'code')
            )
        )
    )
));

これを返します。

Array
(
    [0] => Array
        (
            [Post] => Array
                (
                    [id] => 2
                    [created] => 2012-10-29 09:48:29
                    [modified] => 2012-10-29 09:48:29
                )

            [Primary] => Array
                (
                    [id] => 3
                    [secondary_id] => 6
                    [Secondary] => Array
                        (
                            [id] => 6
                            [short_code] => code
                            [created] => 2012-10-31 11:19:56
                            [modified] => 2012-10-31 11:20:03
                        )

                )

        )

しかし、私が変わるとき

'conditions' => array('Secondary.short_code =' => 'code')

'conditions' => array('Secondary.short_code !=' => 'code')

望まない場合でも、プライマリレコードを返します。

Array
(
    [0] => Array
        (
            [Post] => Array
                (
                    [id] => 2
                    [created] => 2012-10-29 09:48:29
                    [modified] => 2012-10-29 09:48:29
                )

            [Primary] => Array
                (
                    [id] => 3
                    [secondary_id] => 6
                    [Secondary] => Array
                        (
                        )

                )

        )
4

1 に答える 1

5

あなたが達成したいことを正確に知るのは難しいですが、「セカンダリ」モデルに対する条件に基づいて「プライマリ」結果を制限しようとしているように思えます。

その場合は、のjoins()代わりに使用する必要がありcontain()ます。

理由: CakePHP の Containable Behaviorを使用すると、実際には個別のクエリが実行され、結果が結合されてからデータが返されます。このようにすることは多くの点で優れていますが、子に対する条件に基づいて親の結果を制限することはできません。

そのためには、 joins()を使用するだけです。(MySQL JOIN を作成する CakePHP 構文)

于 2012-10-31T18:52:46.337 に答える