这是我用雄辩的with
和whereHas
功能的查询。
$list = $list->with([
'site' => function($query) {
$query->select('site_id', 'name')->where('status', 1);
},
'certification' => function($query) {
$query->select('certification_id', 'name')->where('status', 1);
},
])->whereHas('site', function($query) {
$query->where('status', 1);
})
->whereHas('certification', function($query) {
$query->where('status', 1);
});
->where('status', '1')
认证和站点与列表表具有多对一关系。
但是,直到列表表中的所有项目都带有为止,上述代码才能正常工作certification_id
。但是有时certification_id
可以Null
。
我如何编写此查询以便whereHas
仅在certification_id不为null时实施。以便给出所有结果where certification_id is Null
+给出所有结果,其中certification_id is not null and certifications.status = 1
列表中的关系为
public function certification()
{
return $this->belongsTo('App\Certification', 'certification_id', 'certification_id');
}
浪费了4个小时,在我发布此问题时点击了它。我将whereHas
或嵌套certification_id is null
在一个where
块中,然后点击了!
$list = $list->with([
'site' => function($query) {
$query->select('site_id', 'name')->where('status', 1);
},
'certification' => function($query) {
$query->select('certification_id', 'name')->where('status', 1);
}
])->whereHas('site', function($query) {
$query->where('status', 1);
})
->where(function($query) {
$query->whereHas('certification', function($query) {
$query->where('status', 1);
})->orWhereNull('certification_id');
})
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句