我对型号使用::
和->
运算符有问题
假设我想做一些简单的搜索。我可以这样做:
$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);
}
然后您可以轻松使用(无论minId
和maxId
设置为什么):
Model::minId($minId)->maxId($maxId)->get();