Laravel: 如何在保存|更新之后或之前创建函数
Laravel: how to create a function After or Before save|update
我需要生成一个函数以在 save() 或 update() 之后或之前调用,但我不知道该怎么做。
我想我需要一个来自 save() update() 的回调,但我不知道该怎么做。
谢谢
使用此命令创建提供程序
php artisan make:provider ProviderClassName
然后在启动函数中定义模型的回调
Model::created(function($model){
//Do you want to do
});
可用回调列表:
Model::creating(function($model){});
Model::updated(function($model){});
Model::updating(function($model){});
Model::deleted(function($model){});
Model::deleting(function($model){});
Model::saving(function($model){});
Model::saved(function($model){});
在您的模型中,您可以添加一个 boot() 方法来管理这些事件。
例如,有 User.php 个型号:
class User extends Model
{
public static function boot()
{
parent::boot();
self::creating(function($model){
// ... code here
});
self::created(function($model){
// ... code here
});
self::updating(function($model){
// ... code here
});
self::updated(function($model){
// ... code here
});
self::deleting(function($model){
// ... code here
});
self::deleted(function($model){
// ... code here
});
}
}
您可以在此处查看所有可用的事件:https://laravel.com/docs/5.2/eloquent#events
这仅在您的模型发生事件后有效。
方法一,使用观察者
为您的模型创建观察者
php artisan make:observer UserObserver --model=User
这将在您的模型上创建一个事件观察器
class UserObserver
{
/**
* Handle the User "created" event.
*
* @param \App\Models\User $user
* @return void
*/
public function created(User $user)
{
//
}
/**
* Handle the User "updated" event.
*
* @param \App\Models\User $user
* @return void
*/
public function updated(User $user)
{
//
}
/**
* Handle the User "deleted" event.
*
* @param \App\Models\User $user
* @return void
*/
public function deleted(User $user)
{
//
}
/**
* Handle the User "forceDeleted" event.
*
* @param \App\Models\User $user
* @return void
*/
public function forceDeleted(User $user)
{
//
}
}
您必须在其中一个 ServiceProvider 的引导方法中注册此观察者,最好是 AppServiceProvider
// App\Providers\AppServiceProvider.php
public function boot()
{
User::observe(UserObserver::class);
}
方法二,使用闭包
您可以在模型的静态启动方法中注册自定义事件
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* The "booted" method of the model.
*
* @return void
*/
protected static function boot()
{
parent::boot();
static::created(function ($user) {
//
});
}
}
可用的可观察事件
// Illuminate\Database\Eloquent\Concerns
/**
* Get the observable event names.
*
* @return array
*/
public function getObservableEvents()
{
return array_merge(
[
'retrieved', 'creating', 'created', 'updating', 'updated',
'saving', 'saved', 'restoring', 'restored', 'replicating',
'deleting', 'deleted', 'forceDeleted', 'trashed'
],
$this->observables
);
}
来自 Laravel 文档的注释
When issuing a mass update via Eloquent, the saving, saved, updating, and updated model events will not be fired for the updated models. This is because the models are never actually retrieved when issuing a mass update.
我需要生成一个函数以在 save() 或 update() 之后或之前调用,但我不知道该怎么做。 我想我需要一个来自 save() update() 的回调,但我不知道该怎么做。 谢谢
使用此命令创建提供程序
php artisan make:provider ProviderClassName
然后在启动函数中定义模型的回调
Model::created(function($model){
//Do you want to do
});
可用回调列表:
Model::creating(function($model){});
Model::updated(function($model){});
Model::updating(function($model){});
Model::deleted(function($model){});
Model::deleting(function($model){});
Model::saving(function($model){});
Model::saved(function($model){});
在您的模型中,您可以添加一个 boot() 方法来管理这些事件。
例如,有 User.php 个型号:
class User extends Model
{
public static function boot()
{
parent::boot();
self::creating(function($model){
// ... code here
});
self::created(function($model){
// ... code here
});
self::updating(function($model){
// ... code here
});
self::updated(function($model){
// ... code here
});
self::deleting(function($model){
// ... code here
});
self::deleted(function($model){
// ... code here
});
}
}
您可以在此处查看所有可用的事件:https://laravel.com/docs/5.2/eloquent#events
这仅在您的模型发生事件后有效。
方法一,使用观察者
为您的模型创建观察者
php artisan make:observer UserObserver --model=User
这将在您的模型上创建一个事件观察器
class UserObserver
{
/**
* Handle the User "created" event.
*
* @param \App\Models\User $user
* @return void
*/
public function created(User $user)
{
//
}
/**
* Handle the User "updated" event.
*
* @param \App\Models\User $user
* @return void
*/
public function updated(User $user)
{
//
}
/**
* Handle the User "deleted" event.
*
* @param \App\Models\User $user
* @return void
*/
public function deleted(User $user)
{
//
}
/**
* Handle the User "forceDeleted" event.
*
* @param \App\Models\User $user
* @return void
*/
public function forceDeleted(User $user)
{
//
}
}
您必须在其中一个 ServiceProvider 的引导方法中注册此观察者,最好是 AppServiceProvider
// App\Providers\AppServiceProvider.php
public function boot()
{
User::observe(UserObserver::class);
}
方法二,使用闭包
您可以在模型的静态启动方法中注册自定义事件
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* The "booted" method of the model.
*
* @return void
*/
protected static function boot()
{
parent::boot();
static::created(function ($user) {
//
});
}
}
可用的可观察事件
// Illuminate\Database\Eloquent\Concerns
/**
* Get the observable event names.
*
* @return array
*/
public function getObservableEvents()
{
return array_merge(
[
'retrieved', 'creating', 'created', 'updating', 'updated',
'saving', 'saved', 'restoring', 'restored', 'replicating',
'deleting', 'deleted', 'forceDeleted', 'trashed'
],
$this->observables
);
}
来自 Laravel 文档的注释
When issuing a mass update via Eloquent, the saving, saved, updating, and updated model events will not be fired for the updated models. This is because the models are never actually retrieved when issuing a mass update.