递归调用后如何加入

时间:2019-01-05 21:03:58

标签: php laravel

我感到沮丧。我需要你们的帮助。

我有一个具有以下结构的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上根本没有答案。

0 个答案:

没有答案