Laravel 关系隐式缓存
Laravel relationship implicit caching
我对我遇到的问题有点困惑。
作为集成测试的一部分,我正在测试两个模型之间的关系。
public function an_applications_status_is_over_deadline()
{
//Part 1
$statusId = factory(ApplicationFlowStatus::class)->create([ // id: 1
'deadline_hours' => 72
])->id;
$application = factory(Application::class)->create([ // id: 1
'current_status_id' => $statusId
]);
dump([$application->current_status_id, $application->status()->first()->id, $application->status->id]);
//Part 2
$newStatus = factory(ApplicationFlowStatus::class)->create([ // id: 2
'deadline_hours' => 8
]);
$application->current_status_id = $newStatus->id;
$application->save();
dump([$application->current_status_id, $application->status()->first()->id, $application->status->id]);
}
在我的应用模型上:
public function status()
{
return $this->belongsTo(ApplicationFlowStatus::class, 'current_status_id');
}
第一部分工作完美,但是一旦执行了发送部分,id 就会混淆,我不确定为什么。
Dump 1:
array:3 [
0 => 1
1 => 1
2 => 1
]
Dump 2:
array:3 [
0 => 2
1 => 2
2 => 1
]
为什么在使用 $application->status->id
时第二个转储仍指向第一个状态?
我想知道 Laravel 是否正在缓存幕后关系 :)
是的,但它应该可以处理这种情况。
您可以使用$application->refresh()
希望能解决问题。
我对我遇到的问题有点困惑。
作为集成测试的一部分,我正在测试两个模型之间的关系。
public function an_applications_status_is_over_deadline()
{
//Part 1
$statusId = factory(ApplicationFlowStatus::class)->create([ // id: 1
'deadline_hours' => 72
])->id;
$application = factory(Application::class)->create([ // id: 1
'current_status_id' => $statusId
]);
dump([$application->current_status_id, $application->status()->first()->id, $application->status->id]);
//Part 2
$newStatus = factory(ApplicationFlowStatus::class)->create([ // id: 2
'deadline_hours' => 8
]);
$application->current_status_id = $newStatus->id;
$application->save();
dump([$application->current_status_id, $application->status()->first()->id, $application->status->id]);
}
在我的应用模型上:
public function status()
{
return $this->belongsTo(ApplicationFlowStatus::class, 'current_status_id');
}
第一部分工作完美,但是一旦执行了发送部分,id 就会混淆,我不确定为什么。
Dump 1:
array:3 [
0 => 1
1 => 1
2 => 1
]
Dump 2:
array:3 [
0 => 2
1 => 2
2 => 1
]
为什么在使用 $application->status->id
时第二个转储仍指向第一个状态?
我想知道 Laravel 是否正在缓存幕后关系 :)
是的,但它应该可以处理这种情况。
您可以使用$application->refresh()
希望能解决问题。