在查询中嵌套带有 orWhereNull 的 where 时,我发现了一个奇怪的情况。 结果是返回值既不为空也不正确的行
这是代码:
$query = Document::where("active", true)->where("type_id", $document_type->id);
if($selected) {
$query->where(function($q) use($selected) {
return $q->where("origen_id", $selected->id)
->orWhereNull("origen_id");
});
}
$result = $query->orderBy("origen_id")->get();
debuggin 时,$query->toSql() 返回:
select * from
文档where
活动= ? and
type_id = ? and (
origen_id= ? or
origen_id is null)
当我运行此查询时,它仅返回一个结果,但 $query->get() 返回 2 个结果,其中之一,其 origen_id 与 $selected->id 不同(且不为空)
这是一件非常奇怪的事情,我不知道如何获得预期的结果,因为生成的查询是好的
您在生成的 SQL 查询中遇到的问题似乎与 SQL 字符串中缺少空格有关。如果 Laravel 中构建查询的方式存在问题,就会发生这种情况。
这是更正后的代码片段:
$query = Document::where("active", true)->where("type_id", $document_type->id);
if($selected) {
$query->where(function($q) use($selected) {
$q->where("origen_id", $selected->id)
->orWhereNull("origen_id");
});}
$result = $query->orderBy("origen_id")->get();
// Debugging
dd($query->toSql(), $query->getBindings());