Eloquent选择所有孩子并按顺序排序

时间:2018-01-03 16:19:37

标签: sql laravel eloquent

我有问题,为我的Page表订购正确的选择。

实际实施:

private function findPageBySlug($slug)
{
    $page = Page::with('children')
        ->where('active', 1)
        ->where('slug', $slug)
        ->first();
    if (property_exists($page, 'chidlren')) {
        return $page->whereHas('children', function ($child) {
            return $child->where('active', 1)->orderBy('order', 'asc');
        });
    } else {
        return $page;
    }
}

我需要选择Page的所有子项并按顺序列排序,并且子项可以有另一个子项等等对deepth没有限制。 是否可以为此选择?

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

如果您希望获得所有儿童而不是儿童过滤网页,请使用with()。而不是:

return $page->whereHas('children', function ($child) {
    return $child->where('active', 1)->orderBy('order', 'asc');
});

执行:

return $page->with(['children' => function ($child) {
    return $child->where('active', 1)->orderBy('order', 'asc');
}]);

如果你想要bith过滤并加载孩子,请链接wherHas()with()