Почему у меня ошибка при вставке новых данных? - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь переопределить представление Voyager «редактировать-добавить представление», добавив один новый вход с тем же контроллером.
Но когда я пытаюсь добавить новые данные, я сталкиваюсь с этой ошибкой.

"SQLSTATE [HY000]: общая ошибка: 1364 Поле 'Category_id' не имеет значения по умолчанию (SQL: вставить в` users` (`name`,` email`, `password`,` role_id`, `updated_atзначения `,` creation_at`) (ali12345, ali12345@ali12345.com, $ 2y $ 10 $ qrHhwTFhnjluM7heNE.WCOwSbFIVsag4GWJzunZQGSLgdcXD2r21a, 3, 2019-04-25 22:45:45, 2019-04-25)

Я пытался добавить заполняемый в модель, но у меня не было решения.

protected $fillable = [
            'id',
            'role_id',
            'name',
            'email',
            'avatar',
            'password',
            'remember_token',
            'settings',
            'created_at',
            'updated_at',
            'Category_id'
        ];

1 Ответ

0 голосов
/ 26 апреля 2019

Прежде всего, проблема в том, что вы не установили значение по умолчанию для Category_id в вашей таблице.

Если вы уверены, что ваш запрос имеет Category_id поле, пожалуйста, убедитесь, что вы пропустили все обязательные поля при вставке новой записи.

Позвольте мне привести вам пример того, как это сделать с вашим делом (блоки кода ниже должны быть где-то в вашем контроллер ).Также я дам вам мой любимый способ вставить новую запись.

Использование входных фасадов:

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

При моем способе выше вам не нужно будет напрягаться, заполняя атрибут каждой модели и больше отфильтровывая ненужные поля, если вы правильно задаете заполняемые поля и у вас есть обязательные поля в вашем запросе.

...