1

我对我遇到的问题有点困惑。

作为集成测试的一部分,我正在测试两个模型之间的关系。

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 是否正在缓存幕后的关系:)

4

1 回答 1

2

是的,但它应该处理这种情况。

您可以使用$application->refresh()希望解决问题。

于 2018-09-27T09:12:58.573 回答