我在Laravel上使用hasMany eloquent功能时遇到了麻烦。基本上,有一个名为 Element 的模型,其结构类似于图形。它由id和next_id组成。
我已经设置了一个返回图表上下一个元素的函数。
public function next() {
if($this->element_type->id == 2) {
return $this->subelement->answers();
} else {
return $this->hasOne(Element::class, 'id', 'next_id');
}
}
每当它进入“else”语句时,它就可以正常工作。它根据Element给出了列表的下一个节点。问题是它满足条件$ this-> element_type-> id == 2
我在这种情况下使用的函数是:
关于'元素'模型
public function subelement() {
return $this->hasOne(Branch::class);
}
在'分支'模型
上public function answers() {
return $this->hasMany(Answer::class, 'branch_id', 'id');
}
所以1个元素链接到1个分支,链接到许多答案。从那里,我得到的返回结果$ this-> subelement-> answers()是'答案'的集合。我真正想要的是一个'元素'的集合,它是图的节点。但我无法弄清楚如何改造整个系列。我有一个函数将单个元素从'Answer'转换为'Element'
关于'回答'模式
public function element() {
return $this->belongsTo(Element::class);
}
但我无法弄清楚如何将Collection的每个元素转换为整个'Elements'集合。
任何线索?谢谢。
答案 0 :(得分:1)
在Element模型中创建一个像这样的函数
public function convertToElement($collection){
$col = [] ;
foreach($collection as $ans){
$col[] = $ans->element();
}
return collect($col);
}
然后像return $this->convertToElement($this->subelement->answers()->get());