Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 雄辩/Laravel:对象是否有对应物->;加载(';关系';),例如对象->;卸载(';关系';)?_Php_Laravel_Eloquent - Fatal编程技术网

Php 雄辩/Laravel:对象是否有对应物->;加载(';关系';),例如对象->;卸载(';关系';)?

Php 雄辩/Laravel:对象是否有对应物->;加载(';关系';),例如对象->;卸载(';关系';)?,php,laravel,eloquent,Php,Laravel,Eloquent,当我更新一个关系时,例如在Child上更新parent_id(Child belongsTo parent,parent has many Child)并用Child->parent对象响应时,不知何故返回的父对象仍然是旧的。我认为这是因为父级在当时已经加载 现在我想取消关联,以便再次从db中获取新的父对象 是否有方法卸载已加载的关系?就像您可以通过使用model->load('relation')延迟加载一样,您也可以再次卸载它吗 非常感谢 没有对应的load允许卸载关系 但是,要从数据库重新

当我更新一个关系时,例如在Child上更新parent_id(Child belongsTo parent,parent has many Child)并用Child->parent对象响应时,不知何故返回的父对象仍然是旧的。我认为这是因为父级在当时已经加载

现在我想取消关联,以便再次从db中获取新的父对象

是否有方法卸载已加载的关系?就像您可以通过使用model->load('relation')延迟加载一样,您也可以再次卸载它吗

非常感谢

没有对应的
load
允许卸载关系

但是,要从数据库重新加载关系,只需再次调用
load

$parent = $child->load('relation');
// change parent_id
$parent = $child->load('relation');
我快速查看了laravel的源代码,没有发现任何缓存的迹象。因此,它只是执行一个新的查询,再次获取关系


感谢@Jarek Tkaczyk确认我的假设

卸载关系可以通过向模型传递空数组来完成

$child->setRelations([]);
之后在模型上调用关系时,将在该时刻重新加载该关系


。。至少在当前版本(5.x)中,可能不是在您提问时:)

您可以通过取消设置magic属性(至少在Laravel 5.3及更高版本中)来卸载关系

用法:

unset($model->relation);
是什么使这项工作(来自模型类):


它与
$model->setRelations([])
的作用相同,但对于特定的关系(而不是卸载所有关系)。

从Laravel 5.6开始,有一个
取消关联(字符串)
函数

$parent->load('child');

$parent->unsetRelation('child');

我认为如果您只是尝试取消设置单个关系,而不是通过
$parent->setRelationships([])

再次调用
load('relationship')
怎么办?@lukasgeiter这正是从db重新加载关系的方法。感谢您提供的简单解决方案!不过,有没有一个选项可以在加载关系后卸载它?我不知道。。。为什么要这样做?我正在寻找一个更通用的解决方案,因为我有一个控制器为许多不同的模型服务,它不知道每个模型都做了哪些更改,所以我基本上会在响应PUT之前卸载所有关系。还有,我只是好奇…无论如何谢谢你!你能不能在你的回答中加上一句话,说没有对应的,这样我就可以把它标记为正确的。@josepp当然可以。更新了我的答案。
$parent->load('child');

$parent->unsetRelation('child');