Laravel: обновить модель и связанную модель - PullRequest
1 голос
/ 10 февраля 2020

Я новичок в laravel и в настоящее время пытаюсь обновить некоторую информацию о пользователе.

В своем коде я обновляю имя пользователя и адрес электронной почты для таблицы пользователя и информацию о пользователе в таблице user_info ,

Это работает, но я чувствую, что это можно сделать гораздо более коротким кодом.

Кроме того, каждый раз, когда я обновляю таблицу user_info, вместо обновления текущей строки вставляется новая строка.

public function update(Request $request, $id)
    {
        $data = $request->validate([
            'name' => 'required',
            'email' => 'required',
            'firstName' => 'required',
            'lastName' => 'required',
            'phone' => 'required',
            'cityProvince' => 'required',
            'zipPostalCode' => 'required',
        ]);

        $user = User::find($id);

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

        $user->save();

        $userInfo = new UserInfo([
            'first_name' => $data['firstName'],
            'last_name' => $data['lastName'],
            'phone' => $data['phone'],
            'city_province' => $data['cityProvince'],
            'zip_postalcode' => $data['zipPostalCode'],
        ]);

        $user->userInfo()->save($userInfo);

        return redirect()->route('settings.index');
    }

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020

использование firstOrCreate

public function update(Request $request, $id)
    {
        $data = $request->validate([
            'name' => 'required',
            'email' => 'required',
            'firstName' => 'required',
            'lastName' => 'required',
            'phone' => 'required',
            'cityProvince' => 'required',
            'zipPostalCode' => 'required',
        ]);

        $user = User::find($id);

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

        $user->save();

        $uinfo = UserInfo::firstOrCreate([
               'user_id' => $user->id,
         ]);
         $uinfo->first_name = $data['firstName'];
         $uinfo->last_name = $data['lastName'];
         $uinfo->phone => $data['phone'];
         $uinfo->city_province => $data['cityProvince'];
         $uinfo->zip_postalcode => $data['zipPostalCode'];
         $uinfo->save();



        return redirect()->route('settings.index');
    }

В вашей модели

public function setUserIdAttribute($user_id)
{
    $this->attributes['user_id'] = is_null($user_id) ? '' : $user_id;
}

Или

$table->string('user_id')->nullable()->default('');
0 голосов
/ 10 февраля 2020

Laravel имеет встроенные функции. Вы можете проверить здесь

Вы можете использовать приведенный ниже код. Он проверит, существует ли запись, затем обновится, в противном случае будет добавлена ​​новая запись.

$uinfo = UserInfo::firstOrNew([
               'user_id' => $user->id,
         ]);
$uinfo->first_name = $data['firstName'];
$uinfo->last_name = $data['lastName'];
$uinfo->phone => $data['phone'];
$uinfo->city_province => $data['cityProvince'];
$uinfo->zip_postalcode => $data['zipPostalCode'];
$uinfo->save();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...