0
我在Laravel有一个Eloquent User模型。当我创建一个新用户时,我想为它自动创建一个令牌。我与观察员一起做。但在观察者中,我无法达到创建的模型,它想要创建一个新模型。Laravel 5.3 Observer无法访问模型
我的用户模型:
namespace App;
use App\Observers\UserObserver;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token'
];
public static function boot()
{
parent::boot();
static::observe(UserObserver::class);
}
}
我UserObserver
namespace App\Observers;
use App\User;
class UserObserver
{
public function creating(User $user)
{
$user->token = str_random(30);
}
}
当我创建一个新用户,我得到Connection.php线异常
QueryException 763:
SQLSTATE [23000]:完整性 约束违例:19 NOT NULL约束失败:users.name(SQL: 插入“用户”(“token”,“updated_at”,“created_at”)值 (JQYUmmMrRRJT64VcFVA8UzkpY019u6,2016-10-31 14:33:35 ,2016-10-31 14:33:35))
你的SQL错误意味着你没有* name *的值。你的观察员已被“解雇”,你的代币是JQYUmmMr ...。因此,如果您为名称传递值,也许在哪里创建用户。 – TheFallen
是的,它想要创建一个新的对象,而不是添加引发事件的那个标记值。 首先它创建一个新用户: at Model :: create(array('_ token'=>'OHggG8VZCFxLSfGelxaHdIOYQSx05M7o16E2QKB2','name'=>'name','mail'=>'[email protected] ','password'=>'7X194HeFbwl!85>','password_confirmation'=>'7X194HeFbwl!85>')))RegistrationController.php中的第20行 在接收到事件并想要创建新用户之后,任何属性。 – tthlaszlo
请使用此代码更新您的问题。 – TheFallen