【发布时间】:2016-12-05 17:13:25
【问题描述】:
我需要生成一个函数在 save() 或 update() 之后或之前调用,但我不知道该怎么做。 我想我需要从 save() update() 回调,但我不知道该怎么做。 谢谢
【问题讨论】:
我需要生成一个函数在 save() 或 update() 之后或之前调用,但我不知道该怎么做。 我想我需要从 save() update() 回调,但我不知道该怎么做。 谢谢
【问题讨论】:
这仅在您的模型发生事件后才有效。
为您的模型创建观察者
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)
{
//
}
}
您必须在您的服务提供者之一的引导方法中注册此观察者,最好是 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 文档的注释
当通过 Eloquent 发布批量更新时,保存、保存、更新和更新模型事件不会为更新的模型触发。这是因为在发布大规模更新时从未真正检索到模型。
【讨论】:
使用此命令创建提供程序
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){});
【讨论】:
retrieved()、restoring()、restored()、replicating()和forceDeleted()
在您的模型中,您可以添加一个 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
【讨论】: