我在我的模型中定义了这些关系:
Lead hasMany Job
Job Job HABTM 员工
Job HABTM Truck
我正在尝试find('all')
从我的卡车模型中做一个,并将结果限制为:
- 所有卡车,
- 与具有特定取货日期的卡车相关的所有工作,
- 分配到这些工作的员工,
- 以及与该工作相关的潜在客户。
这是我的查找操作:
// app/models/truck.php
$this->find('all', array(
'contain' => array(
'Job' => array(
'Employee',
'Lead',
'conditions' => array(
'Job.pickup_date' => $date
)
)
)
));
出于某种原因,Cake 执行查询以查找员工 TWICE。这导致所有员工在每项工作中代表两次。这是 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` )
请注意,最后两个查询是重复的。我做错了什么我错过了吗?
更新
似乎 Cake 为每辆卡车发送了一个重复的查询。现在我在卡车表中有 15 条记录,对leads
和的查询employees
每个重复 15 次。