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
只加载一次。
我遇到了一个奇怪的问题,不知道是否应该将其视为一个错误。
我在更新过程中有这个代码:
// 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
只加载一次。