更新Laravel中相关模型的记录

时间:2019-03-27 11:14:02

标签: laravel eloquent

如何通过链表达式更新相关表模型中的记录?

这是我目前正在做的(并且可行)

$user = User::find(1);

$token = Token::where('user_id', $user->id)->first();
$token->token = $request->token;
$token->save();

但是我可以用更优雅的方式进行上述操作吗?

$user = User::find(1);

$user->token()->token = $new_token;
$user->token()->save();

我的用户模型

public function token()
{
    return $this->hasOne('App\Token');
}

3 个答案:

答案 0 :(得分:2)

一行:

null

在使用它之前只需了解以下内容:

  • 如果找不到用户ID,则用户查找可能返回{{1}}。
  • 不会为已更新的模型触发已保存和已更新的模型事件。
  • 更新方法执行执行not go through the Eloquent model方法。

但是,在您的特定情况下,我认为它是有效的,特别是如果您知道用户ID始终有效的话。

答案 1 :(得分:1)

您可以这样做:

User::find(1)->token()->update(['token' => $new_token]);

或者在您的课程App\Token中像这样:

User::find(1)->token()->update_token($new_token);

update_token类中创建App\Token函数:

public function update_token(string $new_token)
{
      $this->update(['token'=>$new_token]);
}

答案 2 :(得分:0)

$user = User::with('token')->findOrFail(1);
$user->token->update(['token' => $request->token]);