问题描述
@foreach($pages as $page)
<option value="{{$page->id}}"
@if($selected == $page->id) selected @endif
>@for($i=0; $i<$levels; $i++)↪@endfor {{$page->title}} (#{{$page->id}})
</option>
@if($page->children->count())
@include('cms::admin.partials.page-selector-option',['pages' => $page->children,'levels' => $levels + 1])
@endif
@endforeach
问题在于传递给此视图的页面集合,例如:
$pages = Page::where('template_id',10)->get()
包含一个带有“test subcat”子页面的页面,该页面正确地作为子页面输出,但它也包含子页面本身作为下面的新项目输出(参见屏幕截图中加载的两个#54页面) .
做这样的事情:
$pages = Page::where('template_id',10)->where('parent_id',0)->get()
有帮助,但是我仍然想在此处显示不一定是顶级页面的页面,因此 parent_id
可能不是 0。
我认为我需要做的是查询 parent() 关系以查看 parent_id 是否具有相同的 template_id,如果是,则不返回此项目。以下是我到目前为止不起作用的内容:
public function scopeWithoutChildren($query)
{
return $query->with(
[
'parent' => function ($q) {
$q->where('template_id','!=',10);
}
]);
}
解决方法
我已经修好了
public function scopeWithoutChildren($query)
{
return $query->whereHas('parent',function ($query) {
return $query->where('parent_id','pages.parent_id');
});
}