多个where子句,Laravel
Posted
技术标签:
【中文标题】多个where子句,Laravel【英文标题】:Multiple where clause, Laravel 【发布时间】:2020-09-28 07:00:24 【问题描述】:我尝试使用 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。我也试过here的答案。
【问题讨论】:
【参考方案1】:问题是,null
的 varchar 是 null
而不是带有值的 varchar。所以不能用=
或!=
'string' 来检查。所以你必须检查 answer_type
是 != 跳过还是 null
$history = AnswerHistory::where('question_id', '=', $id)
->where(function ($query)
$query->where('answer_type', '!=', "skipped")
->orWhereNull('answer_type');
)
->get();
【讨论】:
我现在确实尝试过,并且有效,但我不知道为什么,直到现在,谢谢! null 不是字符串,因此您无法在 sql 中使用 = 或 != 检查它【参考方案2】:您可以将查询更改为像这样的多个 where 条件
$history = AnswerHistory::where([['question_id', '=', $id],['answer_type','<>','skipped']])
->get()
->toArray();
并将!=
替换为<>
希望对你有帮助
【讨论】:
@Beusebiu 你自己告诉过你有 5 行,其中 4 行被跳过,第 5 行是 NULL 所以在这种情况下答案是正确的人 我上传了一张图片。以 id 146 为例。在我的回复中,我只需要那些即使为 null 也未“跳过”的代码,使用此代码我得到 null .. @Beusebiu 查询是正确的,但请确保您的 $id 变量具有正确的值,并在没有任何条件的情况下尝试查询以检查您的模型是否正常工作以上是关于多个where子句,Laravel的主要内容,如果未能解决你的问题,请参考以下文章
TypeORM查找where子句,如何在多个参数中添加where
具有多个 where 子句的 Linq to Datatable
如何使用 Laravel Eloquent 创建多个 Where 子句查询?