Laravel使用点语法查询每个级别的嵌套关系

时间:2016-10-11 10:05:54

标签: php laravel nested eloquent

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

我正在使用我的模型生成一棵树......

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

并添加急切加载查询似乎不起作用。我想也许使用点sytax并查询它只查询最后一个?我不确定。

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

1 个答案:

答案 0 :(得分:0)

更新:似乎我通过这样做设法解决了这个问题...

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

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