2016-10-31 3 views
0

У меня в Laravel есть модель Eloquent User. Когда я создаю нового пользователя, я хочу автоматически создать маркер. Я делаю это с наблюдателем. Но в наблюдателе я не могу достичь созданной модели, она хочет создать новую.Laravel 5.3 Наблюдатель не может достичь модели

Моя модель Пользователь:

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); 
    } 
} 

При создании нового пользователя, я получаю исключение

QueryException в connection.php линии 763:

SQLSTATE [23000]: Целостность Нарушение ограничения: 19 Ошибка NULL сбой: users.name (SQL: Вставить в "users" ("токен", "updated_at", "created_at") значения (JQYUmmMrRRJT64VcFVA8UzkpY019u6, 2016-10-31 14:33:35 , 2016-10-31 14:33:35))

+0

Ваша ошибка SQL означает, что у вас нет значения для * name *. Ваш наблюдатель был «уволен», а ваш токен JQYUmmMr .... Поэтому, возможно, где вы создаете пользователя, если вы передадите значение для имени. – TheFallen

+0

Да, он хочет создать новый объект, вместо того чтобы добавить значение токена для того, кто уволил событие. Сначала это создать нового пользователя: на модели :: Create (массив (массив ('_ лексема' => 'OHggG8VZCFxLSfGelxaHdIOYQSx05M7o16E2QKB2' => 'имя' 'имя', 'почта' =>'[email protected] ',' password '=>' 7X194HeFbwl! 85> ',' password_confirmation '=>' 7X194HeFbwl! 85> '))) в RegistrationController.php line 20 После того, как он поймает событие и хочет создать нового пользователя, без любой атрибут. – tthlaszlo

+0

Пожалуйста, обновите свой вопрос с помощью этого кода. – TheFallen

ответ

0

похоже, вы не установили name. Вы, вероятно, сделать что-то вроде этого:

User:create(Request::all()); 

но нет в запросе нет name, поэтому он не будет заполнен. Но также вы установили столбец name как непустые, так что вы получаете исключение

Смежные вопросы