Mal*_*afi 1 laravel laravel-5 laravel-5.4
我尝试在同一时间用他的名字和id为我的User模型制作一个slug属性,为此我尝试在EventServiceProvider中创建一个保存的函数,这个函数将在保存用户后执行,代码:
User::saved(function($user){
$user->slug = str_slug($user->name.' '.$user->id);
$user->save();
});
Run Code Online (Sandbox Code Playgroud)
但我得到一个问题,函数内部的保存会对父保存函数进行递归调用,这会使得结果如下所示
SQLSTATE [22001]:字符串数据,右截断:1406数据太长,第1行的列'slug'(SQL:update
candidatssetf_name= malek,l_name= aa,password= $ 2y $ 10 $ LD2vRISLv8Bo9va/RarOGOF/7xlg4BjRirOglFw0LB2AEgZiN.B9O,slug= malek-aa-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10 -10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10 -10-10-10-10-10-10-10-10-10-10-10-10-10-10-10-10,updated_at= 2017-03-25 23:52:32,created_at= 2017-03- 25 23:52:32,id= 10其中id= 10)
我怎么能忽略里面保存的函数调用?我需要同样的帮助来解决这个问题,谢谢.
你不能save()在里面打电话saved,后者是由前者产生的.
您应该使用的组合created 和 saving设置您的slug正确值.created在初始保存后调用并且id可用.saving如果name字段被更新,内部的一些基本逻辑将捕获未来的更新.
User::created(function($user) {
$user->slug = str_slug($user->name . ' ' . $user->id);
$user->save();
});
User::saving(function($user) {
if ($user->exists && $user->isDirty('name')) {
$user->slug = str_slug($user->name . ' ' . $user->id);
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
995 次 |
| 最近记录: |