Laravel 将某种实体的 Collection 转换为另一种实体
Laravel Transform a Collection of a certain kind of entity to another
我在使用 Laravel 上的 hasMany eloquent 函数时遇到问题。基本上,有一个名为 Element 的模型,其结构类似于图形。它由一个 id 和 next_id.
组成
我设置了一个函数,该函数 return 是图表上的下一个元素。
public function next() {
if($this->element_type->id == 2) {
return $this->subelement->answers();
} else {
return $this->hasOne(Element::class, 'id', 'next_id');
}
}
只要它进入"else" 语句,它就可以正常工作。它根据元素为我提供了列表的下一个节点。问题是当它满足条件 $this->element_type->id == 2
我在这个案例中使用的函数是:
在'Element'型号
public function subelement() {
return $this->hasOne(Branch::class);
}
在'Branch'型号
public function answers() {
return $this->hasMany(Answer::class, 'branch_id', 'id');
}
所以 1 个元素链接到 1 个分支,该分支链接到许多答案。由此,我得到的 return $this->subelement->answers() 的结果是 Collection 的 'Answer'。我真正想要的是 Collection of 'Element',它们是图形的节点。但我想不出如何改造这整个 Collection。我确实有一个函数可以将单个元素从 'Answer' 转换为 'Element'
在'Answer'型号
public function element() {
return $this->belongsTo(Element::class);
}
但我不知道如何将 Collection 的每个元素转换为 'Elements' 的整个 Collection。
有什么线索吗?谢谢。
像这样在 Element 模型中创建一个函数
public function convertToElement($collection){
$col = [] ;
foreach($collection as $ans){
$col[] = $ans->element();
}
return collect($col);
}
然后调用return $this->convertToElement($this->subelement->answers()->get());
我在使用 Laravel 上的 hasMany eloquent 函数时遇到问题。基本上,有一个名为 Element 的模型,其结构类似于图形。它由一个 id 和 next_id.
组成我设置了一个函数,该函数 return 是图表上的下一个元素。
public function next() {
if($this->element_type->id == 2) {
return $this->subelement->answers();
} else {
return $this->hasOne(Element::class, 'id', 'next_id');
}
}
只要它进入"else" 语句,它就可以正常工作。它根据元素为我提供了列表的下一个节点。问题是当它满足条件 $this->element_type->id == 2
我在这个案例中使用的函数是:
在'Element'型号
public function subelement() {
return $this->hasOne(Branch::class);
}
在'Branch'型号
public function answers() {
return $this->hasMany(Answer::class, 'branch_id', 'id');
}
所以 1 个元素链接到 1 个分支,该分支链接到许多答案。由此,我得到的 return $this->subelement->answers() 的结果是 Collection 的 'Answer'。我真正想要的是 Collection of 'Element',它们是图形的节点。但我想不出如何改造这整个 Collection。我确实有一个函数可以将单个元素从 'Answer' 转换为 'Element'
在'Answer'型号
public function element() {
return $this->belongsTo(Element::class);
}
但我不知道如何将 Collection 的每个元素转换为 'Elements' 的整个 Collection。
有什么线索吗?谢谢。
像这样在 Element 模型中创建一个函数
public function convertToElement($collection){
$col = [] ;
foreach($collection as $ans){
$col[] = $ans->element();
}
return collect($col);
}
然后调用return $this->convertToElement($this->subelement->answers()->get());