更新 Laravel 关系数据

cww*_*cww 5 laravel eloquent eloquent-relationship

当我们通过 Eloquent 关系模型插入或更新数据时,最好使用哪种方法?

例子

$user->profile->update(['salary' => 5000]);

vs
 
$user->profile()->update(['salary' => 5000]);
Run Code Online (Sandbox Code Playgroud)

我明白那个

  1. $user->profile() 将返回关系类,例如Illuminate/Database/Eloquent/Relations/HasOne
  2. $user->profile 将返回实际的 UserProfile 模型类

我不知何故记得我看到有人推荐使用$user->profile->update()而不是$user->profile()->update()但我找不到文章或参考链接了

但是,我发现如果$user->profile为null,那么它可能会导致错误,例如

Call to a member function update() on null

那么一直使用关系函数更新会不会更方便呢?

$user->profile()->create()
$user->profile()->update()
$user->profile()->save()
$user->profile()->delete()
Run Code Online (Sandbox Code Playgroud)

有什么情况我们应该使用$user->profile->save()来代替吗?

或者当它处于多重嵌套关系时应该使用它吗?

$user->profile->bank()->create()
$user->profile()->bank()->create()
Run Code Online (Sandbox Code Playgroud)

更新

参考链接(出于我自己的理解)

结论

目前,将在应用程序中使用下面的代码,两者都会触发事件

if ($user->bank === null) {
    $user->bank()->save(new UserBankAccount($input)); // trigger created event
    // $user->bank()->create($input);// trigger created event
} else {
    $user->bank->update($input); // trigger updated event
    // $user->bank()->update($input); // will NOT trigger updated event
}
Run Code Online (Sandbox Code Playgroud)

小智 0

您可以使用forceFill()

例子:

$user->bank->forceFill($data)->save();
Run Code Online (Sandbox Code Playgroud)