Slug name和id Laravel 5.4

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 candidatsset f_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-10-10,updated_at= 2017-03-25 23:52:32,created_at= 2017-03- 25 23:52:32,id= 10其中id= 10)

我怎么能忽略里面保存的函数调用?我需要同样的帮助来解决这个问题,谢谢.

Jes*_*edc 5

你不能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)

文档概述了可用事件列表.