Неявное кэширование отношений Laravel - PullRequest
0 голосов
/ 27 сентября 2018

Я немного озадачен проблемой, с которой я сталкиваюсь.

В рамках моего интеграционного теста я проверяю взаимосвязь между двумя моделями.

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');
}

Первая часть работает безупречно, однако, как только отправляющая часть выполнена, идентификаторы перепутаны, и я не знаю, почему.

Dump 1:
array:3 [
    0 => 1
    1 => 1
    2 => 1
]

Dump 2:
array:3 [
    0 => 2
    1 => 2
    2 => 1
]

Почему второй дамп все еще указывает на первый статус при использовании $application->status->id?

Мне интересно, Laravel кэширует отношения за сценой:)

1 Ответ

0 голосов
/ 27 сентября 2018

Да, но он должен справиться с этой ситуацией.

Вы можете использовать $application->refresh(), чтобы, надеюсь, решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...