Eloquent / Laravel: есть ли аналог объекта-> load (‘отношение’), например. object- & GT; выгрузить ( ‘отношение’)?

Когда я обновляю отношение, например, обновите parent_id для Child (Child childTo Parent, Parent hasMany Child) и ответьте с помощью объекта Child-> Parent, так как возвращенный Parent все еще остается старым. Я думаю, это потому, что Родитель уже загружен в то время.

Теперь я хочу unlaod отношения, так что новый Родитель снова выбирается из БД.

Есть ли способ разгружать загруженные отношения? Также как вы можете выполнять отложенную загрузку, используя модель-> нагрузка (‘отношение’), вы также можете выгрузить ее снова?

Большое спасибо!

3

Решение

Вы можете выгрузить отношения, отключив магическое свойство (по крайней мере, в Laravel 5.3 и выше).

Использование:

unset($model->relation);

Что делает эту работу (из класса Model):

public function __unset($key)
{
unset($this->attributes[$key], $this->relations[$key]);
}

Это так же, как $model->setRelations([]), но для конкретного отношения (вместо разгрузки всех отношений).

6

Другие решения

Выгрузить отношения можно, передав в модель пустой массив

$child->setRelations([]);

когда вы вызываете отношение к модели после этого, оно будет перезагружено в этот момент.

.. в текущей версии (5.x) по крайней мере, может быть, не во время вашего вопроса 🙂

12

Там нет аналога load это позволило бы разгрузить отношения.

Однако, чтобы перезагрузить отношение из базы данных, вы можете просто позвонить load снова

$parent = $child->load('relation');
// change parent_id
$parent = $child->load('relation');

Я быстро посмотрел на источник laravel и не нашел намека на какое-то кеширование. Так что он просто выполняет новый запрос, извлекая отношения снова.

Спасибо @Jarek Tkaczyk за подтверждение моего предположения

4
По вопросам рекламы [email protected]