Benim modellerde bu ilişkileri tanımlanan ettik:
Lead hasMany Job
Job HABTM Employee
Job HABTM Truck
Benim Kamyon model bir find('all')
yapmaya çalışıyor, ve sonuçlarını sınırlamak ediyorum:
- Tüm Kamyon,
- Belirli bir pikap tarihi olan kamyonlar ile ilgili tüm işleri,
- bu işlerin atanan çalışanlar,
- ve kurşun işi ile ilişkili.
İşte benim bulmak operasyon:
// app/models/truck.php
$this->find('all', array(
'contain' => array(
'Job' => array(
'Employee',
'Lead',
'conditions' => array(
'Job.pickup_date' => $date
)
)
)
));
Nedense, Kek İKİ KEZ Çalışanlar bulmak için sorgu yapar. Bu, tüm çalışanların her iş için iki kez temsil zorunda kalınır. Burada SQL dökümü:
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` )
Son iki sorguları çoğaltmaları olduğuna dikkat edin. Ben eksik yanlış bir şey mi yaptın?
UPDATE
It seems Cake sends a duplicate query for every truck. Now that I have 15 records in the trucks table, the queries to leads
and employees
are duplicated 15 times each.