Я получаю "общую ошибку: 1364" на Laravel, говоря, что у меня нет значения по умолчанию для имени пользователя, может ли кто-нибудь помочь мне?

Я получаю "общую ошибку: 1364" на Laravel, говоря, что у меня нет значения по умолчанию для имени пользователя, может ли кто-нибудь помочь мне?

15.12.2019 08:45:11 Просмотров 51 Источник

Правильно, поэтому я получаю эту ошибку уже некоторое время:

Illuminate\Database\QueryException SQLSTATE[HY000]: общая ошибка: 1364 поле 'username' не имеет значения по умолчанию (SQL: вставить в users(name, email, updated_at, created_at) значения (ggg, things@see.com, 2019-12-15 16:58:26, 2019-12-15 16:58:26))

Я не хочу устанавливать имя пользователя на nullable, так как мне это нужно. Вот как выглядит таблица:

mysql> desc users;
+-------------------+---------------------+------+-----+---------+----------------+
| Field             | Type                | Null | Key | Default | Extra          |
+-------------------+---------------------+------+-----+---------+----------------+
| id                | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| name              | varchar(255)        | NO   |     | NULL    |                |
| email             | varchar(255)        | NO   | UNI | NULL    |                |
| username          | varchar(255)        | NO   | UNI | NULL    |                |
| email_verified_at | timestamp           | YES  |     | NULL    |                |
| password          | varchar(255)        | NO   |     | NULL    |                |
| remember_token    | varchar(100)        | YES  |     | NULL    |                |
| created_at        | timestamp           | YES  |     | NULL    |                |
| updated_at        | timestamp           | YES  |     | NULL    |                |
+-------------------+---------------------+------+-----+---------+----------------+
9 rows in set (0.00 sec)

Вот как выглядит метод create:

     protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
            'username' => $data['username'],
        ]);
    }

Вот где я получаю ошибку.

Редактировать: Хорошо, поэтому я исправил это, переместив 'username'в массив $fillable. Я также скопировал исходный App/User, который предоставляет Laravel, и просто добавил к нему свои методы.

У вопроса есть решение - Посмотреть?

Ответы - Я получаю "общую ошибку: 1364" на Laravel, говоря, что у меня нет значения по умолчанию для имени пользователя, может ли кто-нибудь помочь мне? / I am receiving a 'General error: 1364' on Laravel saying I don't have a default value for username, can someone help me?

Является ответом!
lagbox

15.12.2019 08:46:51

Убедитесь, что вы добавили поле usernameв $fillableна модели:

protected $fillable = [
    ...
    'username',
];

Ларавель 6.х документов - красноречивый - массового назначения $fillable

https://stackoverflow.com/questions/59346506/i-am-receiving-a-general-error-1364-on-laravel-saying-i-dont-have-a-default/59346519#comment104889418_59346519
О, это что-то сделало! Теперь я получаю эту ошибку, хотя: на Symfony\компонент\отладки\исключения\FatalThrowableError Аргумент 1 прошел, чтобы осветить\авт\SessionGuard::логин() должен быть экземпляр загорается\контракты\авт\Authenticatable, экземпляр приложения\пользователя, данные, называется в /Home/бродяга/фреймворк Laravel/petme/поставщика/фреймворк Laravel/рамках/в src/светить/основы/авт/RegistersUsers.php на линии 35
https://stackoverflow.com/questions/59346506/i-am-receiving-a-general-error-1364-on-laravel-saying-i-dont-have-a-default/59346519#comment104889435_59346519
это отдельный вопрос .. ваше App\User модель не простирается от Illuminate\Foundation\Auth\User или реализации Illuminate\Contracts\Auth\Authenticatable напрямую ... это не должно быть проблемой, поскольку App\User, который вы получаете с чистой установкой, уже настроен для этого
https://stackoverflow.com/questions/59346506/i-am-receiving-a-general-error-1364-on-laravel-saying-i-dont-have-a-default/59346519#comment104889507_59346519
Я сам создал пользовательский класс. Это, вероятно, то, что вызывает его. Есть ли способ исправить это вручную, или мне нужно начать с нуля? Я новичок в таких вещах, поэтому я не знаю.
https://stackoverflow.com/questions/59346506/i-am-receiving-a-general-error-1364-on-laravel-saying-i-dont-have-a-default/59346519#comment104889520_59346519
попросите свой Userкласс расширить Illuminate\Foundation\Auth\Userили вам придется реализовать интерфейс Illuminate\Contracts\Auth\Authenticatableсамостоятельно
https://stackoverflow.com/questions/59346506/i-am-receiving-a-general-error-1364-on-laravel-saying-i-dont-have-a-default/59346519#comment104889561_59346519
У меня уже есть расширенная модель. Могу ли я просто заменить модель на Illuminate\Foundation\Auth\User ?
https://stackoverflow.com/questions/59346506/i-am-receiving-a-general-error-1364-on-laravel-saying-i-dont-have-a-default/59346519#comment104889575_59346519
да... это базовый класс, который реализует этот интерфейс и уже расширяет модель, предполагая, какую версию Laravel вы используете
mare96

15.12.2019 08:52:10

Вы, вероятно, пропустили что-то из этого:

  • Проверьте миграцию и посмотрите, есть ли у вас nullable()для этого столбца
  • Как упоминалось в @lagbox, Проверьте свои $fillable:

    config/databse.php
Закрыть X