所以我当前的分页设置如下所示:
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
的记录(Model1
和Model2
的父级)不应包含在$this->paginate('Model0');
的返回数组中。
如何实现这一目标?
答案 0 :(得分: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'
),
),
),
));
答案 1 :(得分:-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来建立临时模型关系。
答案 2 :(得分:-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')
),
),
)
);