РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
157 of 1392 menu

Метод addGlobalScope

Метод addGlobalScope добавляет глобальную область видимости к модели Eloquent. Глобальные области видимости автоматически применяются ко всем запросам, выполняемым через модель, и позволяют задать общие условия фильтрации, которые будут действовать всегда. Первым параметром передаётся имя области видимости или объект класса, реализующего интерфейс GlobalScope, вторым - замыкание, определяющее условия фильтрации.

Синтаксис

<?php Model::addGlobalScope($name, $callback); ?>

Пример

Давайте добавим глобальную область видимости, которая будет фильтровать только опубликованные статьи:

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; class Article extends Model { protected static function booted() { static::addGlobalScope('published', function ($query) { $query->where('status', 'published'); }); } } ?>

Теперь при любом запросе к модели Article будут автоматически выбираться только опубликованные статьи:

<?php namespace AppHttpControllers; use AppModelsArticle; class ArticleController extends Controller { public function index() { $articles = Article::all(); foreach ($articles as $article) { echo $article->title; } } } ?>

Результат выполнения кода:

["article 1", "article 3", "article 5"]

Пример

Добавим глобальную область видимости через отдельный класс. Создадим класс области видимости, который будет фильтровать активных пользователей:

<?php namespace AppModelsScopes; use IlluminateDatabaseEloquentModel; use IlluminateDatabaseEloquentScope; use IlluminateDatabaseEloquentBuilder; class ActiveScope implements Scope { public function apply(Builder $query, Model $model) { $query->where('active', true); } } ?>

Теперь применим эту область видимости к модели User:

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; use AppModelsScopesActiveScope; class User extends Model { protected static function booted() { static::addGlobalScope(new ActiveScope); } } ?>

Теперь все запросы к модели User будут автоматически фильтровать только активных пользователей:

<?php namespace AppHttpControllers; use AppModelsUser; class UserController extends Controller { public function index() { $users = User::where('age', '>', 18)->get(); foreach ($users as $user) { echo $user->name; } } } ?>

Результат выполнения кода:

["user 2", "user 4", "user 6"]

Смотрите также

  • метод withoutGlobalScope,
    который отключает глобальную область видимости
  • метод boot,
    который используется для инициализации модели
  • метод query,
    который возвращает построитель запросов модели
  • метод get,
    который выполняет запрос и возвращает коллекцию
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить