Laravel 保存模型后需要刷新它才能使用关系

Laravel after save model need to refresh it to use the relationships

我遇到了一个奇怪的问题,不知道是否应该将其视为一个错误。

我在更新过程中有这个代码:

    // initial $invoice->user_updated_id = 1

    $invoice = $this->find($id); // Invoice::findOrFail($id)
    $userId = Auth::user()->id; // $userId = 2
    $request = array_merge($request, ['user_updated_id' => $userId]);
    $invoice->fill($request);
    $invoice->save();

    Log::info('Attribute: ' . $invoice->user_updated_id);
    Log::info('Relation: ' . $invoice->userUpdated->id); // Basic relationship to User model.

输出为:

local.INFO: Attribute: 2
local.INFO: Relation: 1

为什么保存模型后关系仍然是旧模型?

如果我重写代码:

    // initial $invoice->user_updated_id = 1

    $invoice = $this->find($id);
    $userId = Auth::user()->id; // $userId = 2
    $request = array_merge($request, ['user_updated_id' => $userId]);
    $invoice->fill($request);
    $invoice->save();
    $invoice->refresh();

    Log::info('Attribute: ' . $invoice->user_updated_id);
    Log::info('Relation: ' . $invoice->userUpdated->id); // Basic relationship to User model.

输出为:

local.INFO: Attribute: 2
local.INFO: Relation: 2

您的 refresh 调用有效,但它也是多余的,因为它刷新了您之前刚刚保存的主模型,您可能不想这样做,因为它的数据很好。要仅刷新关系,您可以使用 load('userUpdated')loadMissing('userUpdated') 方法。 load 加载一些关系,即使它们已经加载,而 loadMissing 只加载一次。