我感到沮丧。我需要你们的帮助。
我有一个具有以下结构的transport_types表。
id name parent_id (name here is an integer pointing to its
translated field, parent_id is itself - adjacency hierarchical in mysql)
我有TransportType模型。现在,我想从给定的运输类型ID中获取所有孩子以及孩子的孩子,依此类推。所以这就是我在TransportType模型中所做的。
public function children() {
return $this->hasMany(TransportType::class, 'parent_id', 'id')->with('children');
}
现在,如果我键入TransportType::findOrFail(2)->children;
,这将使我退还所有孩子,孩子和孩子,依此类推,直到最后。但是您可能已经注意到,正如我告诉您的那样,“名称”列是整数,因此返回的数据包含“整数”列。现在,我还需要将此返回的数据连接到其他表,以便可以转换最终数据。但是当我在->with('children')
之后加入时,结果仍然相同。我不知道该怎么办。
我唯一尝试做的就是使像这样的递归函数。
public static function childrenByLanguage($query, $children){
$query = $query->OfLanguageByAliases("transport_types.name", ['eng']); //this scope is same as join.
return $query;
foreach($children->children as $children){
$query = $children->childrenByLanguage($query, $children);
}
return $query;
}
将此OfLanguageByAliases视为联接。因此结果可能会很好,但请想象一下,如果一个transport_type有100个子代,则此函数将使100个连接失效。
我应该做什么家伙?请帮忙。在Google上根本没有答案。