У меня в 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))
Ваша ошибка SQL означает, что у вас нет значения для * name *. Ваш наблюдатель был «уволен», а ваш токен JQYUmmMr .... Поэтому, возможно, где вы создаете пользователя, если вы передадите значение для имени. – TheFallen
Да, он хочет создать новый объект, вместо того чтобы добавить значение токена для того, кто уволил событие. Сначала это создать нового пользователя: на модели :: Create (массив (массив ('_ лексема' => 'OHggG8VZCFxLSfGelxaHdIOYQSx05M7o16E2QKB2' => 'имя' 'имя', 'почта' =>'[email protected] ',' password '=>' 7X194HeFbwl! 85> ',' password_confirmation '=>' 7X194HeFbwl! 85> '))) в RegistrationController.php line 20 После того, как он поймает событие и хочет создать нового пользователя, без любой атрибут. – tthlaszlo
Пожалуйста, обновите свой вопрос с помощью этого кода. – TheFallen