モデルでこれらの関係を定義しました。
リードhasManyJobJob
HABTM Employee
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は従業員を2回見つけるためにクエリを実行します。これにより、すべての従業員が各ジョブに対して2回代表されることになります。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` )
最後の2つのクエリが重複していることに注意してください。私が行方不明になっている何か間違ったことをしましたか?
更新
Cakeはすべてのトラックに対して重複したクエリを送信しているようです。トラックテーブルに15個のレコードがあるので、クエリとへのクエリleads
はemployees
それぞれ15回複製されます。