为什么插入新数据时出错?
Why do I have error when inserting new data?
我正在尝试通过使用同一控制器添加一个新输入来覆盖 Voyager 视图 "edit-add view"。
但是当我尝试添加新数据时,我遇到了这个错误。
"SQLSTATE[HY000]: General error: 1364 Field 'Category_id' doesn't have
a default value (SQL: insert into `users` (`name`, `email`,
`password`, `role_id`, `updated_at`, `created_at`) values (ali12345,
ali12345@ali12345.com,
y$qrHhwTFhnjluM7heNE.WCOwSbFIVsag4GWJzunZQGSLgdcXD2r21a, 3,
2019-04-25 22:45:45, 2019-04-25 22:45:45))"
我曾尝试在模型中添加 fillable,但没有解决方案。
protected $fillable = [
'id',
'role_id',
'name',
'email',
'avatar',
'password',
'remember_token',
'settings',
'created_at',
'updated_at',
'Category_id'
];
首先,问题是因为您没有在 table.
中为 Category_id 设置默认值
如果您确定您的请求有Category_id字段,请确保您在插入新记录时传递了所有必填字段。
让我给你举一些例子来处理你的案例(下面的代码块应该在你的 Controller 中的某个地方)。另外,我会给你我最喜欢的插入新记录的方式。
使用输入外观:
public function create(Request $request)
{
$user = new User;
$user->username = Input::get('role_id');
$user->name = Input::get('name');
$user->email = Input::get('email');
$user->password = Hash::make(Input::get('password'));
$user->Category_id = Input::get('Category_id');
$user->save();
return Redirect::back();
}
这是我最喜欢的方式:
public function create(Request $request)
{
$user = new User;
$data = $this->cleanUnfillableFields($request->all(), $user->getFillable());
$user->create($data);
return Redirect::back();
}
/**
* This removes/unsets fields that are not fillable from the model.
* This is the magic method where you should put in a separate class or a trait,
* so all controllers can share this method.
*
* @param array $data
* @param array $fillableFields
*
* @return array
*/
protected function cleanUnfillableFields(array $data, array $fillableFields): array
{
foreach ($data as $key => $value) {
if (! in_array($key, $fillableFields))
unset($data[$key]);
}
return $data;
}
通过我上面的方式,您将不再需要麻烦地填写每个模型的属性并过滤掉不必要的字段,只要您正确设置可填写字段并且您的请求中有必填字段。
我正在尝试通过使用同一控制器添加一个新输入来覆盖 Voyager 视图 "edit-add view"。
但是当我尝试添加新数据时,我遇到了这个错误。
"SQLSTATE[HY000]: General error: 1364 Field 'Category_id' doesn't have a default value (SQL: insert into `users` (`name`, `email`, `password`, `role_id`, `updated_at`, `created_at`) values (ali12345, ali12345@ali12345.com, y$qrHhwTFhnjluM7heNE.WCOwSbFIVsag4GWJzunZQGSLgdcXD2r21a, 3, 2019-04-25 22:45:45, 2019-04-25 22:45:45))"
我曾尝试在模型中添加 fillable,但没有解决方案。
protected $fillable = [
'id',
'role_id',
'name',
'email',
'avatar',
'password',
'remember_token',
'settings',
'created_at',
'updated_at',
'Category_id'
];
首先,问题是因为您没有在 table.
中为 Category_id 设置默认值如果您确定您的请求有Category_id字段,请确保您在插入新记录时传递了所有必填字段。
让我给你举一些例子来处理你的案例(下面的代码块应该在你的 Controller 中的某个地方)。另外,我会给你我最喜欢的插入新记录的方式。
使用输入外观:
public function create(Request $request)
{
$user = new User;
$user->username = Input::get('role_id');
$user->name = Input::get('name');
$user->email = Input::get('email');
$user->password = Hash::make(Input::get('password'));
$user->Category_id = Input::get('Category_id');
$user->save();
return Redirect::back();
}
这是我最喜欢的方式:
public function create(Request $request)
{
$user = new User;
$data = $this->cleanUnfillableFields($request->all(), $user->getFillable());
$user->create($data);
return Redirect::back();
}
/**
* This removes/unsets fields that are not fillable from the model.
* This is the magic method where you should put in a separate class or a trait,
* so all controllers can share this method.
*
* @param array $data
* @param array $fillableFields
*
* @return array
*/
protected function cleanUnfillableFields(array $data, array $fillableFields): array
{
foreach ($data as $key => $value) {
if (! in_array($key, $fillableFields))
unset($data[$key]);
}
return $data;
}
通过我上面的方式,您将不再需要麻烦地填写每个模型的属性并过滤掉不必要的字段,只要您正确设置可填写字段并且您的请求中有必填字段。