默认情况下是否有一种干净的方式来启用特定的模型?
它可以通过扩展Laravel的QueryBuilder来工作,但是要做到这一点,你必须重新布线其中的一些核心功能 – 糟糕的做法。
原因
这样做的主要目的是 – 我的一个模型得到许多其他人的重视,现在你必须一再诉诸。即使为此使用闭包 – 您仍然必须调用它。如果能够应用默认排序会更好一些,所以使用此模型的所有用户并不提供自定义排序选项,都将收到按默认选项排序的记录。使用存储库不是一个选项,因为它被迫加载。
解
扩展基本型号:
protected $orderBy;
protected $orderDirection = 'ASC';
public function scopeOrdered($query)
{
if ($this->orderBy)
{
return $query->orderBy($this->orderBy, $this->orderDirection);
}
return $query;
}
public function scopeGetOrdered($query)
{
return $this->scopeOrdered($query)->get();
}
在你的模型中:
protected $orderBy = 'property';
protected $orderDirection = 'DESC';
// ordering eager loaded relation
public function anotherModel()
{
return $this->belongsToMany('SomeModel', 'some_table')->ordered();
}
在你的控制器中:
MyModel::with('anotherModel')->getOrdered();
// or
MyModel::with('anotherModel')->ordered()->first();