Laravel возвращает SQLSTATE [HY000]: Общая ошибка: 1364 Поле «пароль» не имеет значения по умолчанию

Я делаю CMS с Laravel 8, и в этой CMS я сделал страницу для редактирования информации профиля пользователя.

Итак, вот форма:

<form method="POST" action="{{ route('profile.info.confirm') }}">
@csrf

<label class="col-lg-2 control-label" for="name">Name</label>
<input id="name" name="name" type="text" class="form-control" value="{{ auth()->user()->name }}">

<label class="col-lg-2 control-label " for="email">Email</label>
<input id="email" name="email" type="text" class="form-control" value="{{ auth()->user()->email }}">

<label class="col-lg-2 control-label " for="email">Profile Pic</label>
<input id="avatar" name="avatar" type="file" class="email form-control">

<label class="col-lg-2 control-label " for="email"></label>
@if(Auth::user()->photo_id)
    <img src="{{ Auth::user()->photo->path }}" width="50" height="50" alt="user-img" title="{{ Auth::user()->photo->name }}" class="img-circle img-thumbnail img-responsive">
@else
    <p>You don't have any profile picture</p>
@endif

<button class="btn btn-primary">
    UPDATE
</button>
</form>

Затем в Контроллере:

public function postProfileInfo(Request $request)
    {
        $data = $request->validate([
            'name' => 'required',
            'email' => 'required',
            'avatar' => 'mimes:jpeg,jpg,png,gif|max:10000|nullable'
        ]);

        $user = new User();

        if($file = $request->file('avatar')){
            $name = time() . $file->getClientOriginalName();
            $file->move('images', $name);
            $photo = new Photo();
            $photo->name = $file->getClientOriginalName();
            $photo->path = $name;
            $photo->user_id = Auth::id();
            $photo->save();

            $user->photo_id = $photo->id;
        }

        $user->name = $data['name'];
        $user->email = $data['email'];

        $user->save();

        return redirect('/admin');
    }

Теперь проблема в том, что всякий раз, когда я пытаюсь отправить форму, я получаю следующее сообщение об ошибке:

Illuminate \ Database \ QueryException SQLSTATE [HY000]: общая ошибка: 1364 Поле «пароль» не имеет значения по умолчанию (SQL: вставить в users (name, email, updated_at, created_at)

В принципе, я не хочу обновлять пароль, я просто хочу обновить name, email & avatar (необязательно).

Так что здесь не так?


person tejoslaeslio    schedule 19.06.2021    source источник
comment
установить значение по умолчанию для поля пароля в нулевое значение в таблице базы данных   -  person John Lobo    schedule 19.06.2021
comment
Вы хотите создать нового пользователя?   -  person Rwd    schedule 19.06.2021
comment
вы не обновляете, вы создаете нового пользователя, $ user = new User (); так что ты хочешь здесь делать? обновить или создать нового пользователя?   -  person sherifcoder    schedule 19.06.2021
comment
Вот несколько полезных советов, как задавать вопросы: (1) попробуйте что-нибудь, прежде чем задать вопрос. Я удивляюсь, если учесть, насколько часто вы задаете вопросы, что вы недостаточно прорабатываете проблему самостоятельно, прежде чем задать ее. (2a) Стандартные фразы, я был бы очень признателен за любую идею или предложение от вас, ребята, и заранее спасибо может быть опущено во всех сообщениях. Обычно они удаляются со временем, и добавление их просто создает работу для редакторов-добровольцев. (3b) Stack Overflow - это не чат. (4) Заголовки сообщений не нуждаются в самодельных тегах - для этого и предназначена система тегов.   -  person halfer    schedule 20.06.2021
comment
Просмотрите Meta Stack Overflow, когда у вас появится возможность, и, конечно же, Справочный центр. Они оба являются ценными источниками рекомендаций по размещению здесь сообщений.   -  person halfer    schedule 20.06.2021


Ответы (1)


Если вы используете миграцию, вы можете установить для поля значение NULL.

   $table->string('password')->nullable();

затем перезапустите миграцию.

Если вы не используете, вы можете установить в mysql с помощью phpmyadmin.

введите описание изображения здесь

Если вы думаете изменить использование запроса, тогда

ALTER TABLE users MODIFY password varchar(191) DEFAULT NULL
person John Lobo    schedule 19.06.2021
comment
Хотел бы кто-нибудь разрешить пользователю без пароля - это совсем другая история. - person apokryfos; 19.06.2021
comment
У @ apokryfos.i был один сценарий в моем одном из проектов, в котором сначала создавался пользователь, а затем пароль был установлен на отдельной странице. - person John Lobo; 19.06.2021
comment
@ apokryfos.Здесь я согласен с вашей точкой зрения, но не уверен, какой будет вариант использования op. Даже возможность создания пользователя на стороне администратора - person John Lobo; 19.06.2021
comment
Вы всегда заполняете столбец пароля значением. Для вновь созданных или созданных администратором моделей используйте хеш случайной строки. - person miken32; 19.06.2021
comment
@ miken32.yes, я согласен с вашей точкой зрения. - person John Lobo; 19.06.2021