php - 为什么插入新数据时出现错误?
问题描述
我正在尝试通过使用同一控制器添加一个新输入来覆盖 Voyager 视图“编辑添加视图”。
但是当我尝试添加新数据时,我遇到了这个错误。
“SQLSTATE [HY000]:一般错误:1364 字段 'Category_id' 没有默认值(SQL:插入到 `users`(`name`、`email`、`password`、`role_id`、`updated_at`、 `created_at`) 值 (ali12345, ali12345@ali12345.com, $2y$10$qrHhwTFhnjluM7heNE.WCOwSbFIVsag4GWJzunZQGSLgdcXD2r21a, 3, 2019-04-25 22:45:45, 2019-04-25 22:45:45)
我曾尝试在模型中添加可填充,但我没有解决方案。
protected $fillable = [
'id',
'role_id',
'name',
'email',
'avatar',
'password',
'remember_token',
'settings',
'created_at',
'updated_at',
'Category_id'
];
解决方案
首先,问题是因为您没有在表中设置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;
}
使用我上面的方法,只要您正确设置了可填写的字段并且您的请求中有必填字段,您就不必再麻烦地填写每个模型的属性并过滤掉不必要的字段。
推荐阅读
- java - 为什么抛出 AccessDeniedException 时 Files.move() 会删除文件?
- javascript - 如何在 Angular 6 中向 Algolia ais-instantsearch 组件添加数字过滤器
- javascript - console.log 在文档滚动到结束时不会触发
- php - 文件夹中的图像被删除,但图像路径在 PHP 中未更新为 null
- powershell - 如何获取 Hyper-V 主机最近一小时的 CPU 使用率?
- .net - 使 ClickOnce 完全信任应用程序“绿色”
- azure - UserSecretsId 阻止将 F# ASP.NET Core 应用程序部署到 Azure 应用程序服务
- cordova-plugins - Crodova vk 插件不起作用[无法从清单文件中读取包名]
- python - Heroku python 应用程序抛出错误 - KeyError: 'pip._vendor.urllib3.util.queue'
- reporting-services - rdl一页可以显示多少行