Php 如何在laravel中重新加载关系集合?
在laravel中,使用attach()或detach()从关系中添加或删除某些内容后,集合没有更改。因此,如果我有一个模型,它的realation包含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'); 将告诉它刷新关系集合,$
[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');