在处理这样的hasMany
关联时,CakePHPs 自动魔术需要两个查询,一个在Building
表上,一个在BuildingRange
表上。通过该pagiante
方法传递条件时,这些条件将传递给第一个查询,因此由于关联的模型表未连接,因此它将失败。
这个问题可以通过几种不同的方式解决,一种是使用临时连接,例如:
$this->paginate = array
(
'joins' => array
(
array
(
'table' => 'building_ranges',
'alias' => 'BuildingRange',
'type' => 'LEFT',
'conditions' => array('BuildingRange.building_id = Building.id')
)
)
);
$this->paginate('Building', array('BuildingRange.postalcode' => $current_postalcode));
这将导致查询看起来像这样:
SELECT `Building`.`id`,
`Building`.`name`
FROM `buildings` AS `Building`
LEFT JOIN `building_ranges` AS `BuildingRange`
ON ( `BuildingRange`.`building_id` = `Building`.`id` )
WHERE `BuildingRange`.`postalcode` = '12345'
LIMIT 20
请注意,在传递给方法的条件中,无需通过模型paginate
引用模型,即无需使用(无论如何都行不通)。BuildingRange
Building
Builduing.BuildingRange
ps,提一下你使用的 CakePHP 版本总是好的!