【发布时间】:2021-07-08 20:52:54
【问题描述】:
很难在标题中描述这一点,所以这张图片可能会澄清:
我有一个递归视图,它输出上述内容:
@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
假设一个页面有以下列:
- 身份证
- parent_id
- 标题
- 内容
- template_id
问题是传递给这个视图的页面集合例如:
$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);
}
]);
}
【问题讨论】:
标签: php laravel laravel-5 eloquent laravel-blade