J'ai défini ces relations dans mes modèles:Pourquoi CakePHP duplique-t-il mes requêtes? (Ce n'est pas le même "trop de requêtes" problème qui est habituellement demandé)
Lead hasMany Job
Job HABTM employé
emploi HABTM Camion
Je suis en train de faire un find('all')
de mon modèle de camion, et limiter les résultats à:
- tous les camions,
- tous les emplois associés à ces camions t ont une certaine date de ramassage,
- les employés affectés à ces emplois,
- et l'avance associée au travail.
Voici mon opération de recherche:
// app/models/truck.php
$this->find('all', array(
'contain' => array(
'Job' => array(
'Employee',
'Lead',
'conditions' => array(
'Job.pickup_date' => $date
)
)
)
));
Pour une raison quelconque, gâteau fait la requête pour trouver des employés DEUX FOIS. Cela conduit à avoir tous les employés représentés deux fois pour chaque travail. Voici la décharge 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` )
Notez que les deux dernières requêtes sont des doublons. Ai-je fait quelque chose de mal que j'ai manqué?
MISE À JOUR
Il semble gâteau envoie une requête en double pour chaque camion. Maintenant que j'ai 15 enregistrements dans la table des camions, les requêtes à leads
et employees
sont dupliquées 15 fois chacune.
Cela semble intrigant. Je vais vérifier quand je vais travailler lundi. – Stephen
Génial, Rio. Merci pour la découverte des faits. – Stephen
Donc, ce billet a 2 ans. Apparemment, ils ciblent CakePHP 2.0 pour résoudre le problème. Pour l'instant je recourt à la division des requêtes en plusieurs appels à $ this-> find' et à la construction manuelle du tableau de données, ce qui est nul, mais ça craint beaucoup moins quand on passe de 80 requêtes à 4 requêtes. – Stephen