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

时间:2014-09-30 10:53:02

标签: php laravel laravel-4 eloquent

我对使用::->运算符进行模型

时遇到问题

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

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

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

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

$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')始终为真。现在条件where我可以毫无问题地使用->运算符。

可以在不使用额外条件的情况下以其他方式完成吗?

1 个答案:

答案 0 :(得分:4)

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

$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();