我尝试同时为我的用户模型创建一个带有他的名字和 ID 的 slug 属性,为此我尝试在 EventServiceProvider 中创建一个保存的函数,该函数将在保存用户后执行,代码:
User::saved(function($user){
$user->slug = str_slug($user->name.' '.$user->id);
$user->save();
});
但是我得到一个问题,函数内部的保存对父保存的函数进行递归调用,这使得结果是这样的
SQLSTATE[22001]:字符串数据,右截断:1406 第 1 行的列 'slug' 的数据太长(SQL:更新
candidats
集f_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,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);
}
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句