我在我的模型中定義這些關係:爲什麼CakePHP複製我的查詢? (這是不一樣的「查詢太多」的問題,通常是問)
鉛的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
)
)
)
));
出於某種原因,蛋糕確實查詢兩次找到員工。這導致所有員工爲每項工作代表兩次。下面是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 2010-11-21 16:03:57
真棒,力拓。感謝您的事實發現。 – Stephen 2010-11-24 15:54:10
所以Ticket是2歲。顯然他們的目標是CakePHP 2.0來解決這個問題。現在我正在將查詢拆分爲多次調用'$ this-> find'並手動構建數據數組,這很糟糕,但是當從80個查詢轉到4個查詢時,它會減少很多。 – Stephen 2010-11-24 16:25:41