私はcould notが動作するためには等しくない条件を得る。 cancelled_by
フィールドがnull
であるため、すべてのデータが無視されます。 cancelled_by
フィールドがnull
の場合、それはTutor
と等しくないとは限りません。はcakephp3でisntと同じではない
この小さなエラーで5日間の間違ったデータが表示されました。私が作っている間違いはありますか? not equals条件を削除すると、すべてのデータが期待どおりに取得されました。
以下の2行は私が使用したもので、どちらも機能しません。
'Lessons.cancelled_by not like' => '%Tutor%'
'Lessons.cancelled_by !=' => 'Tutor'
$searchDate = date('Y-m-d');
$query3 = $this->find()
->contain([
'Tutors', 'Subjects', 'Students', 'Students.Guardians', 'XeroInvoices'
])
->select([
'Lessons.id', 'Lessons.lesson_date', 'Lessons.start_time', 'Lessons.end_time',
'Tutors.id', 'Tutors.first_name', 'Guardians.id', 'Tutors.last_name',
'Lessons.timesheet_status', 'Students.id', 'Students.first_name',
'Students.last_name', 'Students.has_credit', 'XeroInvoices.invoice_number',
'Guardians.guardian_email', 'Guardians.guardian_mobile',
'Guardians.guardian_last_name', 'Guardians.guardian_first_name',
'Lessons.due_date', 'Lessons.cancelled_by', 'Subjects.name', 'Lessons.revenue',
'Lessons.discount', 'Lessons.surcharge', 'Lessons.future_makeup_lesson_id',
'Lessons.cancelled_pastlesson_id'
])
->where([
'Lessons.due_date' => $searchDate,
'Lessons.lesson_inactive' => false,
'Students.has_credit like' => '%postpaid%',
'Lessons.cancelled_by !=' => 'Tutor'
])
->order([
'Guardians.id',
'Lessons.lesson_date' => 'ASC',
'Lessons.start_time' => 'ASC'
])
->hydrate(false);
一般的に、等価演算子はSQLのnull値とよく対話しません。おそらく、 '' cancelled_by IS '=> NULL'、または 'IS NOT'を適切に" OR "条件に追加するべきです。 –
これはPHPとは関係ありません。 SQL言語では、「NULL」は定義によって何も等しくありません。 –
もし私が問題を理解するなら、私は助けを求めていません。私はこれをcakephp3に投稿しません。 – jagguy