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

Метод boot

Статический метод boot используется в моделях Eloquent для инициализации событий модели и регистрации глобальных скоупов. Метод вызывается автоматически при первом использовании модели и выполняется один раз за время работы приложения. Внутри метода можно регистрировать обработчики событий модели, такие как creating, updating, deleting и другие. Также здесь можно добавлять глобальные скоупы с помощью метода addGlobalScope.

Синтаксис

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; class User extends Model { protected static function boot() { parent::boot(); // Регистрация событий static::creating(function ($model) { // Логика до создания }); } } ?>

Пример

Давайте создадим модель User, которая при создании автоматически устанавливает slug на основе поля name:

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; use IlluminateSupportStr; class User extends Model { protected static function boot() { parent::boot(); static::creating(function ($model) { $model->slug = Str::slug($model->name); }); } } ?>

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

<?php namespace AppHttpControllers; use AppModelsUser; class UserController extends Controller { public function store() { $user = new User(); $user->name = 'John Doe'; $user->save(); echo $user->slug; } } ?>

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

"john-doe"

Пример

Зарегистрируем несколько событий модели Article. При создании статьи будем устанавливать published_at, а при обновлении проверять изменение статуса:

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; use IlluminateSupportCarbon; class Article extends Model { protected static function boot() { parent::boot(); static::creating(function ($article) { $article->published_at = Carbon::now(); }); static::updating(function ($article) { if ($article->isDirty('status') && $article->status === 'published') { $article->published_at = Carbon::now(); } }); static::deleting(function ($article) { // Логика перед удалением echo 'Deleting article: ' . $article->title; }); } } ?>

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

<?php namespace AppHttpControllers; use AppModelsArticle; class ArticleController extends Controller { public function create() { $article = new Article(); $article->title = 'My New Article'; $article->status = 'draft'; $article->save(); echo $article->published_at; } public function publish($id) { $article = Article::find($id); $article->status = 'published'; $article->save(); echo $article->published_at; } } ?>

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

"2026-09-08 10:30:00" "2026-09-08 10:35:00"

Пример

С помощью метода boot можно также добавлять глобальные скоупы, которые будут автоматически применяться к каждому запросу модели. Например, фильтровать только активные записи:

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; use IlluminateDatabaseEloquentBuilder; class Product extends Model { protected static function boot() { parent::boot(); static::addGlobalScope('active', function (Builder $builder) { $builder->where('active', true); }); } } ?>

Теперь любой запрос к модели Product будет автоматически включать условие active = true:

<?php namespace AppHttpControllers; use AppModelsProduct; class ProductController extends Controller { public function index() { $products = Product::all(); foreach ($products as $product) { echo $product->name; } } } ?>

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

["Product 1", "Product 2", "Product 3"]

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

  • метод observe,
    который позволяет регистрировать наблюдатели модели
  • метод addGlobalScope,
    который добавляет глобальные скоупы модели
  • метод withoutEvents,
    который выполняет операции без вызова событий
  • метод save,
    который сохраняет модель в базу данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить