Laravel multiple where子句通过变量检查空值



我正在变量中存储where子句

if($condition === 1) {
$whereClause = ['mID' => NULL, 'qid' => $listing->lID, 'deleted' => false];
}
else {
$whereClause= ['mID' => $member->mID, 'qid' => $listing->lID, 'deleted' => false];
}

我通过获取藏品

$collection = Model::where($whereClause)

但在第一个条件下,我实际上希望mID为0或NULL,我想检索mID可以为0或NULL的项,所以我想要orWhere子句,我确实使用了它,如下所示,但这不起作用,它给出了内存耗尽的错误,所以出了问题

if($condition === 1) {
$whereClause = ['mID' => NULL, 'qid' => $listing->lID, 'deleted' => false];
$orWhereClause = ['mID' => 0, 'qid' => $listing->lID, 'deleted' => false];
$collection = Model::where($whereClause)->orWhere($orWhereClause)
}
else {
$whereClause= ['mID' => $member->mID, 'qid' => $listing->lID, 'deleted' => false];
$collection = Model::where($whereClause)
}

关于如何实现这种条件的任何想法

这似乎是最简单的方法。链接where()方法与将它们作为数组传入相同。

$collection = Model::where('qid', $listing->lID)->where('deleted', false);
if($condition === 1) {
$collection = $collection->whereIn('mID', [0, NULL]);
}
else {
$collection = $collection->where('mID', $member->mID);
}

(请注意,根据文档,如果您想将数组传递给where()方法,那么您做得不对。(

除了缺少";"之外,我认为您应该以这种方式实现它:

$whereClause = [['mID', NULL], ['qid' , $listing->lID] , ['deleted', false]];
$orWhereClause = [['mID', 0], ['qid' , $listing->lID] , ['deleted', false]];
$collection = Model::where($whereClause)->orWhere($orWhereClause);

如果你需要其他条件,只需在右边的数组中推一个数组,第一个参数是字段,第二个是值,或者第一个参数就是字段,第三个是运算符,第三是值

Miken32是正确的,但代码可以在单个查询中编写,而不是在if/else语句中添加where()

$collection = Model::where('qid', $listing->lID)->where('deleted', false)
->when($condition === 1, function($q){
$q->whereIn('mID', [0, NULL]);
})->when($condition !== 1, function($q){
$q->where('mID', $member->mID);
});

最新更新