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

Php 如何在laravel中重新加载关系集合?,php,collections,laravel,laravel-4,relationship,Php,Collections,Laravel,Laravel 4,Relationship,在laravel中,使用attach()或detach()从关系中添加或删除某些内容后,集合没有更改。因此,如果我有一个模型,它的realation包含[1,2],在这之后: $model->relation()->detach(1); $model->relation()->attach(3); 它仍将包含[1,2]!如何刷新它?您可以很容易地告诉laravel使用单个命令加载关系: $model->load('relation'); 将告诉它刷新关系集合,$

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

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

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

您可以很容易地告诉laravel使用单个命令加载关系:

$model->load('relation');
将告诉它刷新关系集合,
$model->relation
现在将显示正确的值

卸载关系的过程也将如下所示:

$model->unsetRelation('relation')

如果要强制所有关系根据需要重新加载,并且您在模型中,则可以使用:

$this->relations = [];

可以使用雄辩的查询生成器:

$freshCollection = $user->roles()->get();

结论:这里有三种解决方案

$model->load('relation');

unset($model->relation);

$freshCollection = $user->roles()->get();`

只需
unset
it并让系统根据需要重新加载即可

unset($model->relation)


在Laravel 7.x中,您可以使用
$model->refresh()
刷新模型及其关系


这对于在执行
$model->relation()->save($relation)
情况后重新加载模型也很方便。您也可以执行
unset($model->relation)
@SilverPaladin这样保存可能更好:这不是直观的,是否意味着每次我的关系没有项目时都会发出DB请求?是的,当您执行
$user->posts
操作时,它会检查
关系
属性,查看是否已检索到相关集合。如果没有,它将从数据库中加载它。
$model->unsetRelation('relation');