Переменная $query
/ $builder
позволяет добавлять ограничения к вашему запросу так же, как при использовании модели Eloquent
или DB
$query->where('admin', true);
Области в основном позволяютвзять несколько ограничений (где предложения, объединения, наличие и т. д.) и сделать так, чтобы вам оставалось только связать один метод вместо добавления одной и той же логики в нескольких местах.
Пример
Допустим, у вас есть таблица продуктов, и вы хотите проверить, что элемент active
и имеет stock
.Если вы не используете области действия, у вас будет что-то вроде:
Product::where('active', true)->where('quantity', '>=', 1)->get();
Принимая во внимание, что вы можете сделать область действия под названием available
в вашей модели:
public function scopeAvailable($query)
{
$query->where('active', true)->where('quantity', '>=', 1);
}
Тогда вы можете простоdo:
Product::available()->get();
Области также могут принимать параметры
Допустим, у нас есть таблица предложений, в которой есть дата available_from
и available_to
иВы хотите получить все строки, которые были доступны на определенную дату:
Offer::where('available_from', '<=', $date)
->where('available_to', '>=', $date)
->get();
или мы можем сделать availableOn
scope
public function scopeAvailableOn($query)
{
$query->where('available_from', '<=', $date)->where('available_to', '>=', $date);
}
, что позволит вам сделать:
Offer::availableOn($date)->get();