Обновление Laravel Eloquent не обновляет одно поле - PullRequest
1 голос
/ 25 апреля 2019

Я использую Laravel API вместе с приложением VueJS Frontend. Я посылаю axios POST звонок вместе с некоторой информацией, которую пользователь сообщает о себе. В бэкэнде я беру эти данные и обновляю запись пользователя в базе данных MySQL.

Это мой бэкэнд-код:

$user = User::where(['logintoken' => $request->login_token, 'remember_token' => $request->remember_token])->first();
            if (!$user) {
                $status = 404;
                $response = ['status' => false, 'message' => 'User not found.'];
            } else {
                $affectedRows = $user->update([
                    'country' => $request->input('country'),
                    'city' => $request->input('city'),
                    'state' => $request->input('state'),
                    'dob' => $request->input('dob'),
                    'language' => $request->input('language'),
                    'street' => $request->input('street'),
                    'house' => $request->input('house'),
                    'avatar' => $request->input('avatar'),
                    'birthplace' => $request->input('birthplace'),
                    'type' => $request->input('userType'),
                    'bio' => $request->input('bio'),
                    'zip' => $request->input('zip'),
                    'has-completed-profile' => 1
                ]);
                if (!$affectedRows) {
                    $response = ['status' => false, 'message' => 'Error updating'];
                    $status = 500;
                } else {
                    $response = ['status' => true, 'message' => 'User updated successfully', 'updated_record' => $user, 'request' => $affectedRows, 'zip' => $request->input('zip')];
                }
            }

Теперь этот код работает отлично, за исключением того, что он не обновляет поле zip. Я console.log() ответ на стороне VueJS, и я вижу, что значение zip является правильным, а также поле типа fo zip в БД является строкой.

Тем не менее, это не работает для столбца zip. Когда я создал миграцию users, столбца zip не было, но через некоторое время, когда мне это понадобилось, я создал другую миграцию и использовал ее для изменения таблицы, вставив поле zip.

Есть идеи, почему это не работает?

Ответы [ 2 ]

1 голос
/ 25 апреля 2019

Вы, вероятно, пропустили zip в вашей модели $fillable.

Так что добавьте, это должно выглядеть так:

protected $fillable = [
        'country', 'city', 'state', 'dob', 'language', 'street', 'house', 'avatar', 'birthplace', 'type', 'bio', 'zip', 'has-completed-profile'
    ];

Найти документацию здесь

1 голос
/ 25 апреля 2019

Вам необходимо добавить это поле в класс соответствующей модели.

Это должно решить вашу проблему.

$fillable служит «белым списком» атрибутов, которые должны быть массово назначены. Итак, для начала вы должны определить, какие атрибуты модели вы хотите сделать массовыми назначаемыми. Вы можете сделать это, используя свойство $fillable в модели. Например, давайте сделаем атрибут zip нашей массы модели User:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = ['zip', // your rest column names];
}

Этот пример должен помочь вам решить вашу проблему.

Вот документация .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...