首页 > 解决方案 > Laravel:更新模型和相关模型

问题描述

我是 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');
    }

标签: phpdatabaselaravel

解决方案


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();

推荐阅读