调用 unsetRelation() 时不会删除关系
Relation is not removed when calling unsetRelation()
unsetRelation('relation')
在调用 pluck('relation')
时没有被删除
$data = Model::with([
'child', 'child.one', 'child.two'
])->get()
移除 'child.one' 和 'child.two' 但保留 child
$data->transform(function ($item, $key) {
if($key == 1){ //remove the second item
$item->unsetRelation('child'); //same behavior if we call $item->unsetRelations();
}
return $item;
});
$output = $data->pluck('child');
如果我们在 $data->child
下有 2 个项目,调用 pluck 后,第一个包含所有 3 个关系(child
、child.one
、child.two
),第二个项目包含只有 child
。我想如果我们在 pluck
方法之后调用 unsetRelation
不应该 return 吗?
如果我们在 transform
关系不存在后调用 dd($data)
。
更新
$items = Model::with([
'child',
'child.one',
'child.two'
])->get();
$items->transform(function($item, $key) use ($request){
if($this->filter($item->child, $request)){ //check if need to exclude
$item->child->param_1 = $item->id; //as example there is more logic
}else{
$item->unsetRelation('child');
}
return $item;
});
return $items->pluck('child');
当您对作为关系的属性执行 pluck 操作时,如果关系不存在,则会加载它。
对于您的示例,您可以 $data = Model::get()
然后 $data->pluck('child')
;你会得到每一个的 child 而不是空集合。
要删除专门针对集合 pluck 的关系,请将关系设置为空
$data->transform(function ($item, $key) {
if($key == 1){ //remove the second item
$item->setRelation('child', collect([]);
}
return $item;
});
这将使关系标记为已加载并仍然返回空结果。
unsetRelation('relation')
在调用 pluck('relation')
$data = Model::with([
'child', 'child.one', 'child.two'
])->get()
移除 'child.one' 和 'child.two' 但保留 child
$data->transform(function ($item, $key) {
if($key == 1){ //remove the second item
$item->unsetRelation('child'); //same behavior if we call $item->unsetRelations();
}
return $item;
});
$output = $data->pluck('child');
如果我们在 $data->child
下有 2 个项目,调用 pluck 后,第一个包含所有 3 个关系(child
、child.one
、child.two
),第二个项目包含只有 child
。我想如果我们在 pluck
方法之后调用 unsetRelation
不应该 return 吗?
如果我们在 transform
关系不存在后调用 dd($data)
。
更新
$items = Model::with([
'child',
'child.one',
'child.two'
])->get();
$items->transform(function($item, $key) use ($request){
if($this->filter($item->child, $request)){ //check if need to exclude
$item->child->param_1 = $item->id; //as example there is more logic
}else{
$item->unsetRelation('child');
}
return $item;
});
return $items->pluck('child');
当您对作为关系的属性执行 pluck 操作时,如果关系不存在,则会加载它。
对于您的示例,您可以 $data = Model::get()
然后 $data->pluck('child')
;你会得到每一个的 child 而不是空集合。
要删除专门针对集合 pluck 的关系,请将关系设置为空
$data->transform(function ($item, $key) {
if($key == 1){ //remove the second item
$item->setRelation('child', collect([]);
}
return $item;
});
这将使关系标记为已加载并仍然返回空结果。