基于Laravel中的其他变量创建条件查询的语法


Syntax for creating conditional queries based on other variables in Laravel

我对型号使用::->运算符有问题

假设我想做一些简单的搜索。我可以这样做:

$model = SomeModel::where('id', '>', 2)->where('id', '<', 10)->get();

在型号名称之后,我需要使用::运算符,然后使用标准的->运算符。

但现在假设我们在一些变量中有$minId$maxId,如果这些变量值为空,我们不想使用where条件:

$minId = '';
$maxId = '';
$model = SomeModel::where('id','>','0'); // dummy where here
if ($minId != '') {
  $model = $model->where('id','>',$minId);
}
if ($maxId != '') {
  $model = $model->where('id','<',$maxId);
}
$model = $model->get();

问题是如何在条件之前使用::。你不能使用$model = SomeModel::,所以我在where('id','>','0')的地方添加了dummy,这总是真的。现在在条件where中,我可以毫无问题地使用->运算符。

在不使用额外条件的情况下,可以用其他方法吗?

首先获取查询(这就是雄辩家无论如何都要做的):

$query = Model::query();
if (..) { $query->where(..) }
if (..) { $query->where(..) }
$query->get();

对于这样的东西,你可以使用范围,例如:

// Model
public function scopeMinId($q, $id)
{
  if ( ! empty($id)) $q->where('id', '>=', $id);
}

然后您可以轻松使用(无论minIdmaxId设置为什么):

Model::minId($minId)->maxId($maxId)->get();