我正在和一个奇怪的问题作斗争,不知道它是否应该被认为是一个bug。
我在更新过程中有这样的代码:
// 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
2条答案
按热度按时间vawmfj5a1#
你的
refresh
调用可以工作,但它也是多余的,因为它刷新了你之前刚刚保存的主模型,你可能不想这样做,因为它的数据是好的。要只刷新关系,你可以使用load('userUpdated')
或loadMissing('userUpdated')
方法。load
加载一些关系,即使它们已经加载,而loadMissing
只做一次。inn6fuwd2#
只需要在load方法上声明要检索的关系作为参数,
你甚至可以调用嵌套关系,例如,如果你想要一个用户和他的联系人,在用户模型中提供你声明的与联系人的关系,你可以做如下