当我提交一个没有密码输入字段的表单时,我想在数据库中插入随机密码。
我的模型用户.php
protected $fillable = [
'email', 'firstname', 'lastname'
];
public function setpasswordAttribute($value)
{
$this->attributes['password'] = bcrypt($value ?: str_random(10));
}
我的控制器
public function store(Request $request)
{
User::create(Request::all());
return 'test';
}
我的数据库
id
firstname
lastname
password
created_at
updated_at
我的错误
SQLSTATE[HY000]: General error: 1364 Field 'password' doesn't have a default value
(SQL: insert into `users` (`email`, `firstname`, `lastname`, `updated_at`, `created_at`)
4条答案
按热度按时间shyt4zoc1#
sqlstate[hy000]:常规错误:1364字段“password”没有默认值(sql:insert-into)
users
(email
,firstname
,lastname
,updated_at
,created_at
)由于默认值
create_users_table
迁移不会为password
字段或允许null作为值。当你打电话的时候
laravel对数据库执行insert查询,因为
password
如果未设置,mysql将返回sqlstate[hy000] 您可以通过修改
create_users_table` 默认情况下,新创建的laravel项目会进行迁移,这将允许您在不提供密码的情况下创建新用户,并且该列将设置为“”或保留为空,具体取决于您使用的方法,如我建议的那样修改迁移
第二个问题是
setPasswordAttribute
在您的模型上,并不意味着当您创建一个没有密码的新用户时,它会自动设置密码,您可以通过捕获creating
将用户插入数据库之前的事件。要做到这一点,请将此添加到您身上
EventServiceProvider
```class EventServiceProvider extends ServiceProvider
{
}
ttygqcqt2#
问题出在您的控制器上:控制器
User::create(Request::all());
没有密码参数,mysql给出了正确的错误:'password' doesn't have a default value
.你可以这样做:
6rvt4ljy3#
方法名称应为
setPasswordAttribute
不是setpasswordAttribute
.kr98yfug4#
检查您请求中的密码输入,如果不存在,请伪造密码: