Как обновить пользователя с помощью привязки модели маршрута в Laravel 5.6 - PullRequest
0 голосов
/ 11 июня 2018

У меня есть вид профиля, в котором я хотел бы обновить профиль пользователя.

мой контроллер:

public function update(Request $request, User $user)
    {

        $validatedData = $request->validate([

            'name' => 'required',
            'email' =>'required|email',
            'key' => 'required'

        ]);

        // dd($user);

        $user->update($validatedData);

        // User::whereId($user->id)->update($validatedData);

        return back()->with('flash', 'Successfully updated profile.');

    }

Я внедряю экземпляр модели в свой маршрут.Когда я dd($user) я получаю текущий пользовательский экземпляр.enter image description here Теперь я хотел бы обновить пользователя с помощью validatedData.Но, к сожалению, это $user->update($validatedData); не работает.Я не понимаю, почему ... Это User::whereId($user->id)->update($validatedData); работает, но очень странно звонить на user user->id.

1 Ответ

0 голосов
/ 11 июня 2018

Важно понимать разницу между двумя подобными вызовами.

whereId() возвращает экземпляр построителя запросов, поэтому вы больше не вызываете методы в модели.Таким образом, update () является вызовом построителя запросов, а не вызовом модели.

find() (или привязка модели маршрута) будет возвращать экземпляр модели.Таким образом, вы будете вызывать update () из самой Модели.

В Eloquent модели встроена защита от массовых назначений. Я предполагаю, что один или несколько ваших столбцов не входят в $ fillable массив в вашей модели.Либо явным образом добавьте каждый столбец в массив $ fillable , либо удалите массив $ fillable и явно добавьте каждый столбец, который не должен быть массовым, назначенным массиву $ guardised .

https://laravel.com/docs/5.6/eloquent#mass-assignment

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