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

Событие retrieved

Событие retrieved относится к событиям модели Eloquent и срабатывает в момент, когда запись уже выбрана из базы данных, но ещё не передана в приложение. Это событие вызывается только при выполнении запросов на чтение, таких как get, first, find и других. В отличие от событий creating или updating, которые связаны с изменением данных, retrieved позволяет перехватывать именно процесс получения данных.

Событие retrieved не принимает дополнительных параметров, кроме самой модели, и не может прервать выполнение запроса. Оно предназначено для выполнения побочных действий после извлечения записи, таких как логирование, модификация атрибутов на лету или инициализация дополнительных данных.

Синтаксис

<?php use AppModelsArticle; Article::retrieved(function ($article) { // Действия после извлечения записи }); ?>

Пример

Давайте добавим логирование каждого извлечения статьи из базы данных:

<?php namespace AppProviders; use AppModelsArticle; use Illuminate\Support\Facades\Log; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { public function boot() { Article::retrieved(function ($article) { Log::info('Article retrieved: ' . $article->id); }); } } ?>

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

"Article retrieved: 1" "Article retrieved: 2"

Пример

Давайте модифицируем атрибут модели после её извлечения, добавив префикс к заголовку:

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; class Article extends Model { protected static function booted() { static::retrieved(function ($article) { $article->title = 'Article: ' . $article->title; }); } } ?>
<?php namespace AppHttpControllers; use AppModelsArticle; class ArticleController extends Controller { public function index() { $article = Article::find(1); echo $article->title; } } ?>

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

"Article: article 1"

Пример

Давайте использовать событие retrieved для подсчёта количества обращений к определённой модели:

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; use IlluminateSupportFacadesCache; class Article extends Model { protected static function booted() { static::retrieved(function ($article) { $key = 'article_views_' . $article->id; Cache::increment($key); }); } } ?>
<?php namespace AppHttpControllers; use AppModelsArticle; use IlluminateSupportFacadesCache; class ArticleController extends Controller { public function show($id) { $article = Article::find($id); $views = Cache::get('article_views_' . $id, 0); echo "Views: " . $views; } } ?>

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

"Views: 1"

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

"Views: 2"

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

  • событие creating,
    которое срабатывает перед созданием новой записи
  • событие updated,
    которое срабатывает после обновления существующей записи
  • событие deleted,
    которое срабатывает после удаления записи
  • событие saving,
    которое срабатывает перед сохранением модели
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить