在laravel中,使用attach()或detach()添加或删除关系中的某些内容后,集合未更改。因此,如果我的模型的realation包含[1, 2]
,则在此之后:
$model->relation()->detach(1);
$model->relation()->attach(3);
它仍将包含[1, 2]
!我该如何刷新它?
答案 0 :(得分:69)
您可以使用一个命令轻松告诉laravel:
$model->load('relation');
将告诉它刷新关系集合,$model->relation
现在将显示正确的值。
答案 1 :(得分:3)
如果您想根据需要强制所有关系重新加载,并且您在模型中,则可以使用:
$this->relations = [];
答案 2 :(得分:3)
可以使用Eloquent查询构建器:
$freshCollection = $user->roles()->get();
答案 3 :(得分:1)
从 Laravel 7.x 开始,您可以使用 $model->refresh()
来刷新模型及其关系。
答案 4 :(得分:0)
结论:这里有三个解决方案
$model->load('relation');
unset($model->relation);
$freshCollection = $user->roles()->get();
答案 5 :(得分:0)
只需将其取消设置,然后按需重新加载系统即可。
unset($model->relation)
答案 6 :(得分:0)
$model->fresh() 为我完成了这项工作。 想要复制多层嵌套模型,然后对它们进行循环。 Laravel 缓存的是之前的关系,而不是新的“当前”关系。