【问题标题】:Blade recursive view showing parent > child page as well as child page刀片递归视图显示父 > 子页面以及子页面
【发布时间】: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++)&#8618;@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)-&gt;get()

包含一个带有“test subcat”子页面的页面,该页面正确地作为子页面输出,但它也包含子页面本身作为下面的新项目输出(参见屏幕截图中的两个 #54 页面加载) .

做这样的事情:

$pages = Page::where('template_id', 10)-&gt;where('parent_id', 0)-&gt;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


    【解决方案1】:

    我已经解决了

    public function scopeWithoutChildren($query)
        {
            return $query->whereHas('parent', function ($query) {
                return $query->where('parent_id', 'pages.parent_id');
            });
        }
    

    【讨论】:

      猜你喜欢
      • 2015-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      • 1970-01-01
      相关资源
      最近更新 更多