1

我在 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
        )
)

希望这一切都有意义。

4

2 回答 2

2

Model::findhasOne使用连接来检索通过和关系关联到源模型的模型记录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'

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

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

只需一项查询。

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

于 2010-04-26T20:10:02.103 回答
0

可以肯定的是,如果不是全部的话,大多数 hasOne 和 belongsTo 都是使用 join 完成的。所以一个查询。您始终可以在 config.php 中将 debug 设置为 2 以查看 sql 查询

于 2010-04-26T19:23:25.190 回答