cakephp包含关联条件问题

mad*_*php 2 cakephp

我有下列协会

后>伯 - >次级

$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')
            )
        )
    )
));
Run Code Online (Sandbox Code Playgroud)

返回此.

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
                        )

                )

        )
Run Code Online (Sandbox Code Playgroud)

但是,当我改变

'conditions' => array('Secondary.short_code =' => 'code')
Run Code Online (Sandbox Code Playgroud)

'conditions' => array('Secondary.short_code !=' => 'code')
Run Code Online (Sandbox Code Playgroud)

它仍然返回主记录,当我不想要它时.

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
                        (
                        )

                )

        )
Run Code Online (Sandbox Code Playgroud)

Dav*_*ave 5

很难确切地知道你希望实现什么,但我认为这听起来像是你试图根据"辅助"模型的条件来限制"主要"结果.

如果是这种情况,您将需要使用joins()而不是contain().

原因是:当您使用CakePHP的Containable Behavior时,它实际上会执行单独的查询,然后在将数据返回给您之前合并结果.这样做在很多方面都很棒,但是它不允许你根据对孩子的条件来限制父结果.

要做到这一点,只需使用连接().(创建MySQL JOIN的CakePHP语法)