Я определил эти отношения в моей модели:Почему CakePHP дублирует мои запросы? (Это не то же самое «слишком много запросов» проблема, которая обычно просят)
Lead hasMany Работа
Работа HABTM Сотрудник
Работа HABTM Грузовик
Я пытаюсь сделать find('all')
из моей тележки модели и ограничить результаты:
- всех грузовые автомобили,
- всех работ, связанные с этими грузовиками т шляпа имеет определенную дату пикапа,
- сотрудников, назначенных на эти задания,
- и сведения, связанные с работой.
Вот моя операция поиска:
// app/models/truck.php
$this->find('all', array(
'contain' => array(
'Job' => array(
'Employee',
'Lead',
'conditions' => array(
'Job.pickup_date' => $date
)
)
)
));
По какой-то причине, Cake делает запрос, чтобы найти сотрудников ДВАЖДЫ. Это приводит к тому, что все сотрудники представляются два раза для каждой работы. Вот SQL дамп:
SELECT `Truck`.`id`, `Truck`.`truck_number` FROM `trucks` AS `Truck` WHERE 1 = 1;
SELECT `Job`.`id`, `Job`.`lead_id`, `Job`.`city`, `JobsTruck`.`id`, `JobsTruck`.`job_id`, `JobsTruck`.`truck_id` FROM `jobs` AS `Job` JOIN `jobs_trucks` AS `JobsTruck` ON (`JobsTruck`.`truck_id` IN (2, 3) AND `JobsTruck`.`job_id` = `Job`.`id`) WHERE `Job`.`pickup_date` = '2010-10-06'
SELECT `Lead`.`id`, `Lead`.`name`, `Lead`.`created` FROM `leads` AS `Lead` WHERE `Lead`.`id` = 4
SELECT `Employee`.`id`, `Employee`.`name`, `Employee`.`created`, `EmployeesJob`.`id`, `EmployeesJob`.`employee_id`, `EmployeesJob`.`job_id` FROM `employees` AS `Employee` JOIN `employees_jobs` AS `EmployeesJob` ON ( `EmployeesJob`.`job_id` = 1 AND `EmployeesJob`.`employee_id` = `Employee`.`id` )
SELECT `Lead`.`id`, `Lead`.`name`, `Lead`.`created` FROM `leads` AS `Lead` WHERE `Lead`.`id` = 4
SELECT `Employee`.`id`, `Employee`.`name`, `Employee`.`created`, `EmployeesJob`.`id`, `EmployeesJob`.`employee_id`, `EmployeesJob`.`job_id` FROM `employees` AS `Employee` JOIN `employees_jobs` AS `EmployeesJob` ON ( `EmployeesJob`.`job_id` = 1 AND `EmployeesJob`.`employee_id` = `Employee`.`id` )
Обратите внимание, что последние два запроса являются дублирующими. Я сделал что-то не так, что мне не хватает?
UPDATE
кажется Cake посылает дубликат запроса для каждого грузовика. Теперь, когда у меня есть 15 записей в таблице грузовиков, запросы до leads
и employees
дублируются по 15 раз.
Это выглядит интригующим. Я проверю это, когда буду работать в понедельник. – Stephen
Awesome, Рио. Спасибо за факт. – Stephen
Так что Билет 2 года. По-видимому, они нацеливаются на CakePHP 2.0, чтобы исправить эту проблему. На данный момент я прибегаю к расщеплению запросов на несколько вызовов на '$ this-> find' и создание массива данных вручную, что отстойно, но это отходит намного меньше, когда вы переходите от 80 запросов к 4 запросам. – Stephen