Я смотрел на примеры на веб-сайте CakePHP, в особенности hasOne используемый в соединении моделей. http://book.cakephp.org/view/78/Associations-Linking-Models-Together
Мой вопрос - это, CakePHP использует два запроса для создания структуры массива данных, возвращенных в модели, которая использует hasOne связь?
Взятый от CakePHP://Образец следует из $this->, Пользователь-> находит () вызов.
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
)
)
Надеюсь, что это все имеет смысл.
Model :: find
использует объединения для получения записей модели, связанных с исходной моделью отношениями hasOne
и belongsTo
. Конкретные запросы SQL выглядят примерно так (с использованием структуры модели Car ownTo 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.colour
становится $ result ['Автомобиль'] ['color']
Driver.name
становится $ result ['Driver'] ['name']
Driver.age
становится $ result ['Driver'] ['age']
Требуется только один запрос.
Получение данных для ассоциаций hasMany
и hasAndBelongsToMany
требует дополнительных запросов, иногда намного больше.
почти наверняка, если не все hasOne и ownTo, выполняются с использованием соединения. так что один запрос. вы всегда можете установить отладку на 2 в config.php, чтобы увидеть запрос sql