我正在使用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/

10-09 19:11