为什么插入新数据时出错?

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;
}

通过我上面的方式,您将不再需要麻烦地填写每个模型的属性并过滤掉不必要的字段,只要您正确设置可填写字段并且您的请求中有必填字段。