在null上调用成员函数update()

时间:2019-07-15 17:06:33

标签: php laravel

我正在构建我的第一个Laravel应用。这是我无法克服的第一个问题。

我试图用Google搜索有关它的信息,但找不到能帮助我的东西。

class ProfilesController extends Controller
{
    public function index(User $user)
    {
        return view('profiles.index', compact('user'));
    }

    public function edit(User $user){
        return view('profiles.edit', compact('user'));
    }

    public function update(User $user){
        $data = request()->validate([
            'description' => 'required',
        ]);

        $user->profile->update($data);

        return redirect("{$user->id}/edit");
    }
}

我想解决这个问题并更新$data

修改

public function profile() { 
    return $this->hasOne(Profile::class); 
} 

public function posts(){ 
    return $this->hasMany(Post::class)->orderBy('created_at', 'DESC'); 
}

5 个答案:

答案 0 :(得分:0)

尝试一下:

optional($user->profile)->update($data);

您可以在此处看到official documentation of optional() helper

答案 1 :(得分:0)

我认为您不能直接在实例上更新,您必须这样做:User::where('user_id', $user->id); 如果要“更新”实例,则必须执行:$user->description = $data['description']; $user->save();

答案 2 :(得分:0)

执行以下操作:

if($user->profile) { $user->profile()->update($data); }

希望这会对您有所帮助。

答案 3 :(得分:0)

我想这是因为默认情况下用户没有profile

解决这个问题的一种方法是在profile模型中的User关系中使用withDefault(),例如

public function profile()
{
    return $this->hasOne(Profile::class)->withDefault();
}

由于配置文件可能不存在,因此您需要稍微更改控制器代码:

更改:

$user->profile->update($data);

收件人:

$user->profile->fill($data)->save();

答案 4 :(得分:0)

我遇到了同样的问题。事实证明,我在创建新用户时忘记创建一个新的空配置文件。所以我在这种情况下调用了用户个人资料的更新为空。 尝试将其添加到 User 模型,然后再迁移:刷新您的数据。

   protected static function boot()
    {
        parent::boot();

        static::created(function ($user) {
            $user->profile()->create();
        });
    }

这将自动为用户创建一个新的个人资料。