2016-01-05 6 views
1

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

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') 

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

Error: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'ollo_hrm.attendancereports' doesn't exist

Screenshot of the error message

+0

$ offday = $ this-> loadModel ('StatusReports'); $ dateStart = ''; $ dateStart = ''; $ query_offday = $ offday-> query(); $ query_offday-> update() -> set (['status' => $ status]) -> где (['work_date BETWEEN: start AND: end']) -> bind (': start', $ dateStart) -> bind (': end', $ dateStart) -> execute(); Я пытаюсь это, но я не знаю, как установить поле состояния, используя другие данные таблицы. – Faisal

+0

Пожалуйста, добавьте PHP-код в свой вопрос, отредактировав его. –

+1

У вас на самом деле есть таблица с именем AttendanceReports? Или это visitance_reports – arilia

ответ

2

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

$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'); 
     } 
    ); 
+0

, что он не работает. Я пробовал следующее, но он дает error.code, как ниже $ this-> loadModel ('Usermgmt.AttendanceReports'); $ dateStart = дата ('Y-m-01'); $ dateEnd = дата ('Y-m-t'); $ q = $ this-> AttendanceReports-> query() -> update ('AttendanceReports s, Holidays h') -> set (['s.status = h.description']) -> где ([ 's.work_date = h.work_date', 'h.work_date BETWEEN: start AND: end']) -> bind (': start', $ dateStart) -> bind (': end', $ dateEnd) -> Execute(); – Faisal

+0

В моем коде была ошибка, я отредактировал, попробуйте сейчас. – arilia

+0

Большое вам спасибо за его работу. – Faisal

Смежные вопросы