Как обновить одну таблицу, используя другую таблицу в CakePHP 3

У меня две таблицы как отчет а также день отдыха. Я хочу обновить отчет использование таблицы день отдыха Таблица. Я хочу генерировать ниже SQL с помощью CakePHP.

UPDATE AttendanceReports s, holiday h
SET s.Status = h.description
WHERE s.work_date =  h.work_date and
h.work_date between '2015-05-05' and '2015-12-31';

Как написать этот запрос в CakePHP? (Я использую CakePHP 3.x)

Я пробовал следующее, но я не знаю, как установить поле состояния, используя дату другой таблицы.

$this->loadModel('Usermgmt.AttendanceReports');
$dateStart = date('Y-m-01') ;
$dateEnd = date('Y-m-t');
$q = $this->AttendanceReports->query()
->update('AttendanceReports s, Holidays h')
->set(['s.status = h.description'])
->where(['s.work_date =  h.work_date','h.work_date BETWEEN :start AND :end'])
->bind(':start', $dateStart)
->bind(':end', $dateEnd)
->execute();

это будет генерировать правильный вывод, как это

UPDATE AttendanceReports s, Holidays h
SET s.status = h.description
WHERE (s.work_date = h.work_date AND
h.work_date BETWEEN '2016-01-01' AND '2016-01-31')

Но это дает ошибку, как показано ниже:

Ошибка: SQLSTATE [42S02]: Базовая таблица или представление не найдено: 1146 Таблица «ollo_hrm.attendancereports» не существует

Скриншот сообщения об ошибке

1

Решение

Я не могу попробовать код на данный момент, но что-то вроде этого должно работать

$q = $this->StatusReports->query()
->update('status_report s, holiday h')
->set(['s.Status = h.Ocassion'])
->where(function ($exp, $q) {
return $exp->add('s.Workdate =  h.holiday_date')
->between('h.holiday_date','2015-05-05', '2015-12-31');
}
);
2

Другие решения

Других решений пока нет …