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

Метод withoutGlobalScope

Метод withoutGlobalScope применяется к запросу Eloquent для исключения определённой глобальной области видимости из текущего запроса. Первым параметром передаётся имя класса области видимости или строка с именем области. Метод возвращает тот же запрос, но уже без учёта исключённой области.

Синтаксис

<?php Model::withoutGlobalScope($scopeClass); ?>

Пример

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

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; use IlluminateDatabaseEloquentBuilder; class Article extends Model { protected static function booted() { static::addGlobalScope('published', function (Builder $builder) { $builder->where('status', 'published'); }); } } ?>
<?php namespace AppHttpControllers; use AppModelsArticle; class ArticleController extends Controller { public function index() { $articles = Article::withoutGlobalScope('published')->get(); foreach ($articles as $article) { echo $article->title . ' - ' . $article->status; } } } ?>

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

"Article 1 - published" "Article 2 - draft" "Article 3 - published" "Article 4 - draft"

Пример

Если глобальная область видимости задана через отдельный класс, её можно отключить, передав имя класса:

<?php namespace AppModelsScopes; use IlluminateDatabaseEloquentBuilder; use IlluminateDatabaseEloquentModel; use IlluminateDatabaseEloquentScope; class PublishedScope implements Scope { public function apply(Builder $builder, Model $model) { $builder->where('status', 'published'); } } ?>
<?php namespace AppModels; use IlluminateDatabaseEloquentModel; use AppModelsScopesPublishedScope; class Article extends Model { protected static function booted() { static::addGlobalScope(new PublishedScope); } } ?>
<?php namespace AppHttpControllers; use AppModelsArticle; use AppModelsScopesPublishedScope; class ArticleController extends Controller { public function index() { $articles = Article::withoutGlobalScope(PublishedScope::class)->get(); foreach ($articles as $article) { echo $article->title . ' - ' . $article->status; } } } ?>

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

"Article 1 - published" "Article 2 - draft" "Article 3 - published" "Article 4 - draft"

Пример

Метод withoutGlobalScope можно использовать для отключения сразу нескольких глобальных областей видимости, передавая массив имён или классов:

<?php namespace AppHttpControllers; use AppModelsArticle; use AppModelsScopesPublishedScope; use AppModelsScopesRecentScope; class ArticleController extends Controller { public function index() { $articles = Article::withoutGlobalScope([ PublishedScope::class, RecentScope::class ])->get(); foreach ($articles as $article) { echo $article->title; } } } ?>

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

"Article 1" "Article 2" "Article 3" "Article 4" "Article 5"

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

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