У меня есть несколько таблиц со следующими отношениями:
Компания имеет много рабочих мест, сотрудников и грузовиков, пользователей
У меня настроены все внешние ключи, а также таблицы, модели, контроллеры и представления.
Первоначально в таблице Jobs было логическое поле с именем "назначено". Следующая операция поиска (из JobsController) успешно возвращает всех сотрудников, все грузовые автомобили и все задания, которые не назначены и выполняются в определенный день для одной компании (без возврата пользователей с использованием содержимого, которое можно содержать) :
$this->set('resources', $this->Job->Company->find('first', array(
'conditions' => array(
'Company.id' => $company_id
),
'contain' => array(
'Employee',
'Truck',
'Job' => array(
'conditions' => array(
'Job.assigned' => false,
'Job.pickup_date' => date('Y-m-d', strtotime('Today'));
)
)
)
)));
Теперь, с тех пор, как я написал этот код, я решил сделать гораздо больше с заданиями. Итак, я создал новую модель «Задание», которая принадлежит Грузовику и принадлежит Работе. Я добавил hasMany Assignments как для модели Truck, так и для модели Jobs. У меня есть оба внешних ключа в таблице назначений, а также некоторые другие поля назначения.
Теперь я пытаюсь получить ту же информацию выше, только вместо того, чтобы проверять назначенное поле из таблицы заданий, я хочу проверить таблицу назначений, чтобы убедиться, что задания там не существует. Я больше не могу использовать сдерживаемое поведение, если я собираюсь использовать функцию «соединения» метода find из-за ошибок mysql (согласно поваренной книге). Но следующий запрос возвращает все задания, даже если они выпадают в разные дни.
$this->set('resources', $this->Job->Company->find('first', array(
'joins' => array(
array(
'table' => 'employees',
'alias' => 'Employee',
'type' => 'LEFT',
'conditions' => array(
'Company.id = Employee.company_id'
)
),
array(
'table' => 'trucks',
'alias' => 'Truck',
'type' => 'LEFT',
'conditions' => array(
'Company.id = Truck.company_id'
)
),
array(
'table' => 'jobs',
'alias' => 'Job',
'type' => 'LEFT',
'conditions' => array(
'Company.id = Job.company_id'
)
),
array(
'table' => 'assignments',
'alias' => 'Assignment',
'type' => 'LEFT',
'conditions' => array(
'Job.id = Assignment.job_id'
)
)
),
'conditions' => array(
'Job.pickup_date' => $day,
'Company.id' => $company_id,
'Assignment.job_id IS NULL'
)
)));
РЕДАКТИРОВАТЬ: Как выясняется, мой запрос работает, была проблема с моими данными, которая приводила к возвращению всех назначений.