У меня проблема с созданием пользователя-администратора для пакета панели администратора Voyager в Laravel 5.4.

после установки пакета путешествия с помощью этой команды:

php artisan voyager:install

Мне нужно было создать пользователя-администратора с помощью этой команды:

php artisan voyager:admin [email protected] --create

а затем введите имя и пароль

Проблема в том, что после ввода имени пользователя и пароля он возвращает эту ошибку

Общая ошибка: 1364 Поле «employee_name» не имеет значения по умолчанию (SQL: вставить в значения employee (email) ([email protected]))

и у меня уже есть база данных, но с другим соглашением об именах, например: таблица пользователей, которую я называю сотрудником, и поле имени, называемое employee_name

Мой вопрос: есть ли способ сопоставить ожидаемые поля в voyager с моими фактическими полями в моей базе данных, потому что я не могу их изменить?

Заранее спасибо .


person Ali Beshir    schedule 09.01.2018    source источник


Ответы (4)


Поскольку вы изменили обычную структуру модели пользователя и, вероятно, столкнетесь с аналогичными проблемами с другими пакетами, пытающимися добавить пользователей, вы можете создать метод boot() в пользовательской модели, чтобы установить для this->employee_name значение this->name и затем отключите this->name, чтобы, когда записи из других пакетов пытались использовать атрибут name, вы исправляли его на атрибут employee_name.

Это не приходит мне в голову из-за памяти, поэтому это может включать немного больше «логики», но я думаю, что если вы посмотрите на метод загрузки, вы увидите, что вы можете делать такие вещи. Я использовал его для автозаполнения столбцов динамическими значениями.

ХТН

person StevenHill    schedule 04.06.2018

Когда вы выполняете эту команду, Voyager создает для вас нового пользователя с помощью функции массового назначения.

Итак, добавляем $fillable к модели User:

protected $fillable = ['name', 'email', 'password'];
person Alexey Mezenin    schedule 09.01.2018
comment
во-первых, спасибо за ваш ответ .. но я думаю, что есть недоразумение .. пакет voyager создает нового пользователя и ожидает столбец с именем .. которого нет в моей таблице .. столбец имени с именем employee_name в моей таблице .. Таким образом, он не вставляет строку со столбцом "имя_сотрудника"... и столбец "имя_сотрудника" не имеет значения по умолчанию, поэтому он выдает эту ошибку. - person Ali Beshir; 09.01.2018
comment
вот что я сделал в своей модели, как вы предложили protected $fillable = ['email', 'password','employee_name']; - person Ali Beshir; 09.01.2018
comment
@AliReda, почему бы тебе не переименовать employee_name в name? - person Alexey Mezenin; 09.01.2018
comment
SQLSTATE[HY000]: Общая ошибка: 1364 Поле «employee_name» не имеет значения по умолчанию (SQL: вставить в значения employee (email, password) ([email protected], hashedPassword)) - person Ali Beshir; 09.01.2018
comment
потому что я должен изменить это во многих операторах sql во многих контроллерах ... и есть другие приложения, которые работают с этой базой данных, поэтому я не могу изменить имя таблицы или ее столбцы. - person Ali Beshir; 09.01.2018
comment
@AliReda в этом случае вам нужно вручную добавить данные с помощью сеялки или чего-то еще, потому что name жестко запрограммировано в команде. - person Alexey Mezenin; 09.01.2018
comment
Я думаю, что это логичное и возможное решение. Спасибо за ваше время. - person Ali Beshir; 09.01.2018

Общая ошибка: 1364 Поле «employee_name» не имеет значения по умолчанию.

Вы можете установить значение по умолчанию равным нулю в своей базе данных, это решает проблему.

person PHPFan    schedule 26.08.2019

Используйте Mutator, чтобы сослаться на любую попытку добавить данные в 'имя ' в 'employee_name'.

Для вашего случая:

Приложение\Пользователь.php

public function setNameAttribute($value)
{
    $this->attributes['employee_name'] = $value;
}
person Preston Ong    schedule 04.02.2020