格式化CakePHP连接语句
我正在使用CakePHP2.3.8,并试图更有效地联接两个表。建筑物和建筑物租金格式化CakePHP连接语句,php,mysql,cakephp,join,Php,Mysql,Cakephp,Join,我正在使用CakePHP2.3.8,并试图更有效地联接两个表。建筑物和建筑物租金 buildings id | name | description | property_owner | building_type 1 Big Big Building 1 1 building_rental_rates id | building_type | rate_name |
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
我想找一栋楼,选择不同的租金。这些表在建筑类型上连接。这是我的find声明
$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是一个数组,包含该表中共享同一建筑类型的所有条目
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_类型上加入Building.id(应该是Building.Building_类型=BuildingRentalRate.Building_类型)
即使和我有这样的联系
//Building.php
public $hasMany = array('BuildingRentalRate' => array('foreignKey' => 'building_type'));
//BuildingRentalRate.php
public $belongsTo = array('Building' => array('foreignKey' => 'building_type'));
它将在BuildingRentalRate.Building_type上加入Building.id,尽管在两个模型中都指定Building_type作为外键
我可以在条件中执行某种嵌套SQL查询吗?或者有更简单的方法吗?如果在
BuildingRentalRate.php中以这种方式设置关系,应该可以避免使用联接
$public belongsTo = array(
'Building' => array(
'foreignKey' => false,
'conditions' => array
(
'Building.building_type' => 'BuildingRentalRate.building_type'
)
)
);
我应该在Building.php模型中添加什么?如果我没有放置任何关联,那么CakePHP不会自动搜索它。我尝试在Building.php中使用相反的方法(条件为'BuildingRentalRate.Building_-type'=>'Building.Building_-type'),但它没有加入任何内容。当我搜索建筑物时,返回的BuildingRentalRate数组都是空的。