Событие created
Событие created принадлежит к системе событий Eloquent моделей в Laravel и запускается после того, как новая запись была успешно сохранена в базу данных. Это событие позволяет выполнить дополнительные действия сразу после создания модели, например, отправить уведомление, обновить связанные данные или выполнить логирование. Событие получает экземпляр созданной модели в качестве параметра.
Синтаксис
<?php
Model::created(function ($model) {
// Additional logic after model creation
});
?>
Пример
Давайте создадим модель User и зарегистрируем событие created для отправки приветственного письма:
<?php
namespace AppProviders;
use AppModelsUser;
use IlluminateSupportServiceProvider;
class EventServiceProvider extends ServiceProvider
{
public function boot()
{
User::created(function ($user) {
// Send welcome email
echo "Welcome email sent to {$user->email}";
});
}
}
?>
Теперь при создании нового пользователя:
<?php
namespace AppHttpControllers;
use AppModelsUser;
class UserController extends Controller
{
public function store()
{
$user = User::create([
'name' => 'John Doe',
'email' => 'john@example.com',
]);
echo "User created with ID: {$user->id}";
}
}
?>
Результат выполнения кода:
"Welcome email sent to john@example.com"
"User created with ID: 1"
Пример
Давайте используем событие created для автоматического создания связанной записи. При создании пользователя будем создавать профиль:
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class User extends Model
{
protected static function booted()
{
static::created(function ($user) {
$user->profile()->create([
'bio' => 'Default bio',
'avatar' => 'default.jpg',
]);
echo "Profile created for user {$user->id}";
});
}
public function profile()
{
return $this->hasOne(Profile::class);
}
}
?>
<?php
namespace AppHttpControllers;
use AppModelsUser;
class UserController extends Controller
{
public function store()
{
$user = User::create([
'name' => 'Jane Smith',
'email' => 'jane@example.com',
]);
$res = $user->profile;
echo "User: {$user->name}, Profile bio: {$res->bio}";
}
}
?>
Результат выполнения кода:
"Profile created for user 2"
"User: Jane Smith, Profile bio: Default bio"
Пример
Давайте используем событие created для логирования создания записи. Будем записывать информацию о создании в лог-файл:
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
use IlluminateSupportFacadesLog;
class Article extends Model
{
protected $fillable = ['title', 'content', 'user_id'];
protected static function booted()
{
static::created(function ($article) {
Log::info('Article created', [
'article_id' => $article->id,
'title' => $article->title,
'user_id' => $article->user_id,
]);
echo "Article logged successfully";
});
}
}
?>
<?php
namespace AppHttpControllers;
use AppModelsArticle;
class ArticleController extends Controller
{
public function store()
{
$article = Article::create([
'title' => 'Laravel Events',
'content' => 'Article content about events',
'user_id' => 1,
]);
echo "Article created: {$article->title}";
}
}
?>
Результат выполнения кода:
"Article logged successfully"
"Article created: Laravel Events"