1

status_reportholidayのような 2 つのテーブルがあります。休日テーブルを使用してstatus_reportテーブルを更新したい。CakePHP を使用して以下の SQL を生成したいと考えています。

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' が存在しません

エラー メッセージのスクリーンショット

4

1 に答える 1

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');
        }
    );
于 2016-01-05T07:24:49.830 に答える