首页 > 解决方案 > 多个where子句,Laravel

问题描述

我尝试使用 2 个 where 子句进行查询,但我得到了一个不好的响应,不知道为什么。

$history = AnswerHistory::where('question_id', '=', $id)
     ->where(function ($query) {
            $query->where('answer_type', '!=', "skipped");
      })
      ->get();

对于特定$id的数据库,我有 5 行,4 行,answer_type = 'skipped但 5 行是NULL.

如果我删除第二个,我得到 5 个包含"skipped"答案的项目,则我的响应为空。

想要的响应是 1 行,其中answer_type != 'skipped'.

PS。我也从这里尝试了答案。

在此处输入图像描述

标签: laraveleloquentlaravel-7

解决方案


问题是,一个 varchar 是nullnull而不是一个有值的 varchar。所以它不能用=!='字符串'检查。所以你必须检查answer_type是 != skipped 还是 null

$history = AnswerHistory::where('question_id', '=', $id)
    ->where(function ($query) {
        $query->where('answer_type', '!=', "skipped")
            ->orWhereNull('answer_type');
    })
    ->get();

推荐阅读