CakePHP hasOne ineffeciency?

Я смотрел на примеры на веб-сайте 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
        )
)

Надеюсь, что это все имеет смысл.

1
задан Thorpe Obazee 16 December 2010 в 10:03
поделиться

2 ответа

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 требует дополнительных запросов, иногда намного больше.

2
ответ дан 3 September 2019 в 01:00
поделиться

почти наверняка, если не все hasOne и ownTo, выполняются с использованием соединения. так что один запрос. вы всегда можете установить отладку на 2 в config.php, чтобы увидеть запрос sql

0
ответ дан 3 September 2019 в 01:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: