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

问题描述 投票:1回答:1

我有问题写正确选择与我的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的所有子项并按顺序列排序,并且孩子可以有另一个孩子等等对深度没有限制。是否可以写这个选择?

谢谢你的帮助

sql laravel eloquent
1个回答
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');
}]);

如果你想同时过滤和加载孩子,请连接qazxsw poi和qazxsw poi

© www.soinside.com 2019 - 2024. All rights reserved.