我正在使用CakePHP 2.3.8,并且试图更有效地联接两个表。建筑物和building_rental_rates
buildings
id | name | description | property_owner | building_type
1 Big Big Building 1 1
building_rental_rates
id | building_type | rate_name | rate
1 1 daily 150.00
2 1 hourly 15.00
我想查找一栋建筑物并选择不同的租金。这些表在building_type上联接。这是我的查找声明
$buildings = $this->Building ->find('all',array(
'Building.property_owner' => '1',
'fields' => array('Building.*','BuildingRentalRate.*'),
'joins' => array(
array(
'table' => 'building_rental_rates',
'alias' => 'BuildingRentalRate',
'type' => 'inner',
'conditions' => array(
'Building.building_type = BuildingRentalRate.building_type'
)
)
)
));
这是结果
Array
(
[0] => Array
(
[Building] => Array
(
[id] => 1
[name] => Big
[description] => Big Building
[property_owner] => 1
[building_type] => 1
)
[BuildingRentalRate] => Array
(
[id] => 1
[building_type] => 1
[rate_name] => daily
[rate] => 150.00
)
)
[1] => Array
(
[Building] => Array
(
[id] => 1
[name] => Big
[description] => Big Building
[property_owner] => 1
[building_type] => 1
)
[BuildingRentalRate] => Array
(
[id] => 2
[building_type] => 1
[rate_name] => hourly
[rate] => 15.00
)
)
)
尽管正确找到了数据,但遍历数据却很痛苦。我可以使用join语句生成此输出吗?请注意,BuildingRentalRate是一个数组,其中包含该表的所有条目,它们共享相同的building_type
Array
(
[0] => Array
(
[Building] => Array
(
[id] => 1
[name] => Big
[description] => Big Building
[property_owner] => 1
[building_type] => 1
)
[BuildingRentalRate] => Array
(
[0] => Array
(
[id] => 1
[building_type] => 1
[rate_name] => daily
[rate] => 150.00
)
[1] => Array
(
[id] => 2
[building_type] => 1
[rate_name] => hourly
[rate] => 15.00
)
)
)
)
我知道Cake在使用模型关联时可以输出这样的结果,但是我显然无法正确地建立关联,因为它继续加入BuildingRentalRate.building_type上的Building.id(应该为Building.building_type = BuildingRentalRate.building_type)
即使和我这样的交往...
//Building.php
public $hasMany = array('BuildingRentalRate' => array('foreignKey' => 'building_type'));
//BuildingRentalRate.php
public $belongsTo = array('Building' => array('foreignKey' => 'building_type'));
尽管在两个模型中都将building_type指定为外键,但它将在BuildingRentalRate.building_type上加入Building.id。
我可以在条件中执行某种嵌套的SQL查询,还是有一种更简单的方法?
最佳答案
如果您在BuildingRentalRate.php
中以这种方式设置关系,则应该能够避免使用联接
$public belongsTo = array(
'Building' => array(
'foreignKey' => false,
'conditions' => array
(
'Building.building_type' => 'BuildingRentalRate.building_type'
)
)
);
关于php - 格式化CakePHP连接语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23671387/