我正在查看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
)
)
希望这一切都有意义。
答案 0 :(得分:2)
Model::find
使用联接来检索与hasOne
和belongsTo
关系关联的源模型的模型记录。特定的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']
只需要一个查询。
检索hasMany
和hasAndBelongsToMany
关联的数据需要额外的查询,有时需要更多查询。
答案 1 :(得分:0)
非常确定大多数(如果不是全部)hasOne和belongsTo都是使用join完成的。所以一个查询。你总是可以在config.php中将debug设置为2以查看sql查询