jsp*_*hpl 8 php laravel eloquent
当我更新关系时,例如更新Child上的parent_id(Child belongsTo Parent,Parent hasMany Child)并使用Child-> Parent对象进行响应,不知何故返回的Parent仍然是旧的.我认为这是因为当时已经加载了Parent.
我现在想要取消关系,以便再次从db中获取新的Parent.
有没有办法卸载加载的关系?就像你可以通过使用model-> load('relation')来延迟加载,你还可以再次卸载它吗?
非常感谢!
Com*_*ast 13
可以通过将空数组传递给模型来完成卸载关系
$child->setRelations([]);
Run Code Online (Sandbox Code Playgroud)
当你在那之后调用模型上的关系时,它将在那时重新加载.
..至少在当前版本(5.x)中,也许不是在您的问题时:)
qua*_*kes 11
您可以通过取消设置魔法属性来卸载关系(至少在Laravel 5.3及更高版本中).
用法:
unset($model->relation);
Run Code Online (Sandbox Code Playgroud)
是什么让这项工作(来自Model类):
public function __unset($key)
{
unset($this->attributes[$key], $this->relations[$key]);
}
Run Code Online (Sandbox Code Playgroud)
它的作用相同$model->setRelations([]),但是对于特定的关系(而不是卸载所有关系).
从 Laravel 5.6 开始,有一个unsetRelation(string)函数。
$parent->load('child');
$parent->unsetRelation('child');
Run Code Online (Sandbox Code Playgroud)
我认为如果您只是想取消设置单个关系,而不是删除所有 by ,这会提供更多的可读性$parent->setRelationships([])。
| 归档时间: |
|
| 查看次数: |
3805 次 |
| 最近记录: |