CakePHP有效率低吗?

时间:2010-04-26 19:14:36

标签: php cakephp has-one

我正在查看CakePHP网站上的示例,特别是用于链接模型的hasOne。 http://book.cakephp.org/view/78/Associations-Linking-Models-Together

我的问题是,CakePHP是否使用两个查询来构建使用hasOne链接的模型中返回的数据的数组结构?

取自CakePHP: //来自$ this-> User-> find()调用的示例结果。

Array
(
    [User] => Array
        (
            [id] => 121
            [name] => Gwoo the Kungwoo
            [created] => 2007-05-01 10:31:01
        )
    [Profile] => Array
        (
            [id] => 12
            [user_id] => 121
            [skill] => Baking Cakes
            [created] => 2007-05-01 10:31:01
        )
)

希望这一切都有意义。

2 个答案:

答案 0 :(得分:2)

Model::find使用联接来检索与hasOnebelongsTo关系关联的源模型的模型记录。特定的SQL查询看起来像(使用Car belongsTo Driver模型结构):

SELECT `Car`.`brand`, `Car`.`colour`, `Driver`.`name`, `Driver`.`age`
    FROM `cars` AS `Car`
    LEFT JOIN `drivers` AS `Driver` ON `Car`.`id` = `Driver`.`car_id`
WHERE `Car`.`brand` = 'Aston Martin'

属于每个模型的字段可以通过表/模型别名解析为相应的数组元素:

  • Car.brand变为$result['Car']['brand']
  • Car.colour变为$result['Car']['colour']
  • Driver.name变为$result['Driver']['name']
  • Driver.age变为$result['Driver']['age']

只需要一个查询。

检索hasManyhasAndBelongsToMany关联的数据需要额外的查询,有时需要更多查询。

答案 1 :(得分:0)

非常确定大多数(如果不是全部)hasOne和belongsTo都是使用join完成的。所以一个查询。你总是可以在config.php中将debug设置为2以查看sql查询