如何在laravel中重新加载关系集合?

时间:2014-04-29 12:09:53

标签: php collections laravel laravel-4 relationship

在laravel中,使用attach()或detach()添加或删除关系中的某些内容后,集合未更改。因此,如果我的模型的realation包含[1, 2],则在此之后:

$model->relation()->detach(1);
$model->relation()->attach(3);

它仍将包含[1, 2]!我该如何刷新它?

7 个答案:

答案 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() 来刷新模型及其关系。

Here the docs

答案 4 :(得分:0)

结论:这里有三个解决方案 $model->load('relation'); unset($model->relation); $freshCollection = $user->roles()->get();

答案 5 :(得分:0)

只需将其取消设置,然后按需重新加载系统即可。

unset($model->relation)

答案 6 :(得分:0)

$model->fresh() 为我完成了这项工作。 想要复制多层嵌套模型,然后对它们进行循环。 Laravel 缓存的是之前的关系,而不是新的“当前”关系。