我是Laravel的新手。当我尝试使用服务提供者和模型事件来记录更新信息时,我遇到了一个初学者的问题。
关注了在线文档:https://laravel.com/docs/5.3/eloquent#events
将所有代码放在一起后,我发现模型事件仅在创建使用时触发,但在编辑用户时从不记录任何内容。
我错过了什么吗?感觉$用户没有被正确分配。这个从哪里来?来自其他服务提供商?
任何解释或提示都将不胜感激!
<?php
namespace App\Providers;
use App\User;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
User::creating(function ($user) {
Log::info('event creating');
});
User::created(function ($user) {
Log::info('event created');
});
User::updating(function ($user) {
Log::info('event updating');
});
User::updated(function ($user) {
Log::info('event updated');
});
User::saving(function ($user) {
Log::info('event saving');
});
User::saved(function ($user) {
Log::info('event saved');
});
User::deleting(function ($user) {
Log::info('event deleting');
});
User::deleted(function ($user) {
Log::info('event deleted');
});
}
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
//
}
}
答案 0 :(得分:21)
您需要从数据库中检索用户,然后保存该用户以触发事件。例如:
这不会触发更新事件:
Metal
这将触发更新事件:
OpenGL
答案 1 :(得分:4)
可能的原因:
根本没有更新行 - 没有更改。因此没有解雇,
您使用了update
。请查看此处的文档:https://laravel.com/docs/5.3/eloquent#updates
通过Eloquent发布批量更新时,不会为更新的模型触发已保存和更新的模型事件。这是因为在发布批量更新时,实际上从未检索过模型。