Yii2 AR Join + Where, как?

Есть две таблицы Employee и Schedule, schedule связано с employee через schedule.employee = employee.id

Нужно отобрать все расписания сотрудников за конкретный день.

В SQL запрос выглядит так:
select * from employee
left join schedule on schedule.employee  = employee.id
where schedule.date = <ДАТА>


В Yii модели у меня созданы через gii, соответственно и связи.
В контроллере у меня следующее
$qEmployee = Employee::find()->joinWith('schedules')->where(['schedule.date'=>$curDate]);
$Employee = $qEmployee->all();


Проблема в том, что в результате каждый $Employee->schdeules содержит в себе все записи из schedule без учета дня, такое впечатление, что не работает where.

Где я ошибся?
  • Вопрос задан
  • 1120 просмотров
Пригласить эксперта
Ответы на вопрос 1
vyachin
@vyachin
Ищу работу
читаем тут https://github.com/yiisoft/yii2/blob/master/docs/g..., жалко пока нет перевода, может сделаете для меня?

$qEmployee = Employee::find()->joinWith('schedules')->where(['schedule.date'=>$curDate]);
тут вы выбираете всех сотрудников!!!!! у которых есть запись в таблице schedule за дату $curDate. Т.е. вы сделали фильт на выборку из таблицы employee. А когда обращаетесь к employee->schedule выводятся все!!! записи из таблицы schedule для данного сотрудника.
Для того чтобы сделать как вы хотите, вам нужно наложить условия на выборку из таблицы schedule. Я лишь приведу пример
$employers = Employee::find()->joinWith(['schedules'=>function ($query) use($curDate) { 
$query->where(['date'=>$curDate]);
}])->all();
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы