我对使用::
和->
运算符进行模型
我们假设我想做一些简单的搜索。我可以这样做:
$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
我可以毫无问题地使用->
运算符。
可以在不使用额外条件的情况下以其他方式完成吗?
答案 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);
}
然后您可以轻松使用(无论minId
和maxId
设置为什么):
Model::minId($minId)->maxId($maxId)->get();