不等于不能在cakephp3中工作

时间:2017-02-27 01:00:39

标签: cakephp cakephp-3.0 nullable query-builder comparison-operators

我无法获得不等于工作的条件。由于cancelled_by字段已null,因此忽略了所有数据。如果cancelled_by字段为null,那么这并不等于不等于Tutor

这个小错误花了我5天的错误数据。我正在犯错吗?一旦我删除了not equals条件,就会按预期检索所有数据。

以下两行是我使用的,但都没有效果。

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

3 个答案:

答案 0 :(得分:2)

'Lessons.cancelled_by !=' => 'Tutor'是正确的,但它不适用于空值。 'Lessons.cancelled_by IS NOT' => 'NULL'将适用于NULL值。我想你可以同时使用两者。因此,结果只会是(cancelled_by!=' Tutor' AND cancelled_by IS NOT NULL),这是您需要的结果。

答案 1 :(得分:0)

这是海报的正确答案。如果那个人可以在这里放置答案。平等运算符通常不能与SQL中的空值良好地交互。您可能应该使用'cancelled_by IS'=>添加“OR”条件NULL或IS NOT,视情况而定。

答案 2 :(得分:-1)

使用 - > notEq()

示例

$query = $articles->find()
    ->where(function ($exp) {
        return $exp
            ->eq('author_id', 2)
            ->eq('published', true)
            ->notEq('spam', true)
            ->gt('view_count', 10);
    });

在此处阅读更多Cakephp 3