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());