使用点语法查询每一层的嵌套关系


Laravel Nested relationships using dot syntax querying each level

这里的目标是让我的菜单模型为每个相关的子节点和子节点的相关页面创建一个树。

我正在用我的模型生成一棵树,像这样…

 public static function tree()
{
    return static::with(implode('.', array_fill(0, 100, 'children')))->with('Pages')->where('parent_id', '=', 0)->get();
}

但问题是如何获得每个孩子相关的页面。我试过了……

    return static::with([implode('.', array_fill(0, 100, 'children')) => function($query) {
        $query->with('Pages');
    }])->with('Pages')->where('parent_id', '=', $id)->get();

和添加即时加载查询似乎不起作用。我想也许用点语法查询它只查询最后一个?我不确定。

我需要查询查询的每个级别,但我不知道如何。任何帮助将非常感激!

更新:似乎我已经设法通过这样做来解决这个问题…

public static function genRelationalArray()
{
 $arr = [implode('.', array_fill(0, 100, 'children'))];
    for($i = 0; $i < 10; $i++) {
      $item = 'children.Pages';
      $arr[] = $item;
      $item = 'children.'. $item;
    }
  return $arr;
}
public static function treeFromId($id)
{
  $childArr = static::genRelationalArray();
  return static::with($childArr)->with('Pages')->where('parent_id', '=', $id)->get();
}

但如果有更短更有效的方法,请发帖:)