Slug 名称和 ID Laravel 5.4

马利克·本·埃尔瓦菲

我尝试同时为我的用户模型创建一个带有他的名字和 ID 的 slug 属性,为此我尝试在 EventServiceProvider 中创建一个保存的函数,该函数将在保存用户后执行,代码:

User::saved(function($user){
             $user->slug = str_slug($user->name.' '.$user->id);
             $user->save();
         });

但是我得到一个问题,函数内部的保存对父保存的函数进行递归调用,这使得结果是这样的

SQLSTATE[22001]:字符串数据,右截断:1406 第 1 行的列 'slug' 的数据太长(SQL:更新candidatsf_name=malek,l_name= aa,email= a @ra.com,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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章