Laravel 5.3 Observer не может добраться до модели
У меня есть модель Eloquent User в Laravel. Когда я создаю нового пользователя, я хочу автоматически создать для него токен. Я делаю это с наблюдателем. Но в обозревателе я не могу добраться до созданной модели, она хочет создать новую.
Моя модель пользователя:
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 Не выполнено ограничение NOT NULL: users.name (SQL: вставить в значения "users" ("token", "updated_at", "creation_at") (JQYUmmMrRRJT64VcFVA8UzkpY019u6, 2016-10-31 14:33:35, 2016-10-31 14:33:35))
1 ответ
Похоже, вы не установили name
, Вы, вероятно, делаете что-то вроде этого:
User:create(Request::all());
но нет name
в запросе, поэтому он не будет заполнен. Но также вы установили name
столбец не нулевой, поэтому получаю исключение