SQLSTATE [HY000]: общая ошибка: 1364 Поле «пароль» не имеет значения по умолчанию (SQL: вставить в users
(email
, firstname
, lastname
, updated_at
, created_at
)
Вы получаете эту ошибку, потому что миграция по умолчанию create_users_table
не предоставляет значение по умолчанию для поля password
или допускает пустое значение в качестве значения.
когда вы вызываете
User::create($request->all());
laravel, чтобы выполнить запрос на вставку в базу данных, и поскольку password
не установлен, MySQL вернет `SQLSTATE [HY000]
.изменив миграцию create_users_table
, которая пришла по умолчанию с новым созданным проектом laravel,
Schema::create('users', function (Blueprint $table) {
// other table columns goes here
$table->string('password')->nullable();
// OR
$table->string('password')->default("");
// other table columns goes here
});
, это позволит вам создать нового пользователя без предоставления пароля, и для этого столбца будет установлено значение "" или оставлено пустымв зависимости от метода, который вы используете для изменения миграции, как я предлагаю
Во-вторых, определение setPasswordAttribute
в вашей модели не означает, что когда вы создаете нового пользователя без пароля, он будет автоматически устанавливать пароль для этого, выможет сделать это, поймавcreating
событие перед вставкой пользователя в базу данных.
для этого добавьте это в вас EventServiceProvider
class EventServiceProvider extends ServiceProvider
{
/**
* Register any events for your application.
*
* @return void
*/
public function boot()
{
parent::boot();
User::creating(function($user){
if($user->password === "" || empty($user->password)){
$user->password = bcrypt(str_random(10));;
}
})
}
}
это событие инициируется до того, как пользователь сохраняется в базе данныхи это позволит вам внести некоторые изменения во все атрибуты, которые уже установлены для пользователя, которого вы хотите сохранить в базе данных