Когда я обновляю отношение, например, обновите parent_id для Child (Child childTo Parent, Parent hasMany Child) и ответьте с помощью объекта Child-> Parent, так как возвращенный Parent все еще остается старым. Я думаю, это потому, что Родитель уже загружен в то время.
Теперь я хочу unlaod отношения, так что новый Родитель снова выбирается из БД.
Есть ли способ разгружать загруженные отношения? Также как вы можете выполнять отложенную загрузку, используя модель-> нагрузка (‘отношение’), вы также можете выгрузить ее снова?
Большое спасибо!
Вы можете выгрузить отношения, отключив магическое свойство (по крайней мере, в Laravel 5.3 и выше).
Использование:
unset($model->relation);
Что делает эту работу (из класса Model):
public function __unset($key)
{
unset($this->attributes[$key], $this->relations[$key]);
}
Это так же, как $model->setRelations([])
, но для конкретного отношения (вместо разгрузки всех отношений).
Выгрузить отношения можно, передав в модель пустой массив
$child->setRelations([]);
когда вы вызываете отношение к модели после этого, оно будет перезагружено в этот момент.
.. в текущей версии (5.x) по крайней мере, может быть, не во время вашего вопроса 🙂
Там нет аналога load
это позволило бы разгрузить отношения.
Однако, чтобы перезагрузить отношение из базы данных, вы можете просто позвонить load
снова
$parent = $child->load('relation');
// change parent_id
$parent = $child->load('relation');
Я быстро посмотрел на источник laravel и не нашел намека на какое-то кеширование. Так что он просто выполняет новый запрос, извлекая отношения снова.
Спасибо @Jarek Tkaczyk за подтверждение моего предположения