0

所以我当前的分页设置如下所示:

    public $paginate = array(
        'limit' => 30,
        'contain' => array(
                'Model1' => array(
                        'fields' => array('id')
                ),
                'Model2' => array(
                        'conditions' => array(
                                'Model2.type' => 'Sometype'
                        ),
                        'Model3' => array(
                                'fields' => array('someField')
                        )
                )
        )
);

我想要实现的是,当包含的Model2恰好为空时(没有Model2类型'Sometype'),那么(和的父级)的这条记录不Model0应该包含在返回的数组中。Model1Model2$this->paginate('Model0');

这怎么可能实现?

4

3 回答 3

0

我不确定这是否可以通过可包含的行为来实现。我知道你可以通过手动连接来做到这一点(免责声明:我的查询可能会关闭,因为我没有测试过):

$results = $this->Model0->find('all', array(
        'conditions' => array(
            'Model2.id <>' => null,
        ),
        'joins' => array(
            array(
                'table' => 'model2',
                'alias' => 'Model2',
                'type' => 'LEFT',
                'conditions' => array(
                    'Model2.type' => 'Sometype',
                    'Model2.model0_id = Model0.id',
                ),
            ),
            array(
                'table' => 'model3',
                'alias' => 'Model3',
                'conditions' => array(
                    'Model3.model2_id = Model2.id'
                ),
            ),
        ),

    ));
于 2014-03-10T21:22:07.480 回答
-1

将根条件设置为需要 Model2 的有效 id。

public $paginate = array(
    'limit' => 30,
    'conditions'=>array(
            'Model2.id >'=>0
    )
    'contain' => array(
            'Model1' => array(
                    'fields' => array('id')
            ),
            'Model2' => array(
                    'conditions' => array(
                            'Model2.type' => 'Sometype'
                    ),
                    'Model3' => array(
                            'fields' => array('someField')
                    )
            )
    )
);

根据您的模型关系,这可能不起作用。它只适用于 belongsTo 和 hasOne 我相信。在这种情况下,您应该从 Model2 开始分页或使用 bindModel 来建立临时模型关系。

于 2014-03-11T08:15:03.987 回答
-1

在查询的基本级别而不是在包含内部设置条件。只需确保在它们前面加上型号名称即可。

public $paginate = array(
    'conditions' => array(
        'Model2.type' => 'Sometype'
    ),
    'limit' => 30,
    'contain' => array(
        'Model1' => array(
            'fields' => array('id')
         ),
         'Model2' => array(
             'Model3' => array(
                 'fields' => array('someField')
             ),
         ),
    )

);

于 2016-05-12T17:07:47.210 回答