Нет ничего, что могло бы присоединить найденное Job/s
к определенному Truck
.
(Надеюсь, мое объяснение не слишком сложно для понимания, но CakePHP иногда может быть таким! Imho)
Jobs
приписывают Trucks
почти произвольным образом (моя память о Cake такова, что это может произойти); природа вызова HABTM прикрепляет Job/s
к каждому из 15 Trucks
. Это, кажется, текущий процесс с моей точки зрения;
- Получить все грузовики.
- Получить все рабочие места для тех грузовиков, где дата x .
- [Задача 1] Прикрепите найденные
Jobs
к каждому Truck
(то есть вашим 15 грузовикам), но прикрепите к каждому Truck
.
- [Задача 2] Получить всех потенциальных клиентов / сотрудников, связанных с этой работой, снова для каждого
Truck
.
Проблема 1: источник проблемы. Вы можете видеть во втором запросе (SELECT Job
...), где он использует правильные truck_id
в операторе ON, но Cake не может "соединить" эти Jobs
обратно в правый Truck
, потому что это другой запрос! Таким образом, он объединяет найденные вакансии с каждым Truck
.
Проблема 2: Это «реальная» проблема, поскольку Cake не создает длинные операторы JOIN, поэтому нет способа найти Employees
/ Leads
только для тех Trucks
, которые вы хотите. Вот почему он находит их для каждого Грузовика, потому что вы делаете FindAll
на Truck
.
Надеюсь, это имеет смысл. Вам нужно найти все по Jobs
, так как это 'center' запроса (pickup_date).
$this->loadModel('Job');
$whatev = $this->Job->find('all', array(
'contain' => array(
'Job' => array(
'Truck',
'Employee',
'Lead',
'conditions' => array(
'Job.pickup_date' => $date
)
)
)
));
Запросы CakePHP действительно работают только тогда, когда вы находите одну / всю определенную модель, лучше начинать с середины и работать с любой стороны, если у вас двойные отношения HABTM. Если вы хотите выполнить сортировку по Truck, то вам, возможно, придется написать собственный запрос (метод модели), чтобы выполнить задачу самостоятельно. В сыром SQL этот запрос может быть простым, в абстрактном супер-пироге PHP это трудно разрешить CakePHP.
Счастливой выпечки, как говорится!