如何显示我的子类别与父子关系

如何解决如何显示我的子类别与父子关系

我有 category 表,它有一个 parent_id 列,有两个值:childrenparent

parent_id 为 NULL 时,它是父(类别),否则它是子(子类别)。

更多详细信息:我有一个 navigation blade,我在其中显示类别,并在下拉列表中显示子类别。我在我的刀片中扩展了它。所以当你在控制器中看到 $nav_category 变量时,它用于在导航中显示类别

当我点击一个类别并打开它的页面时,我希望能够看到它的 subcategories 但它显示了我所有的 subcategories

这是我的类别模型:

class Category extends Model
{
    use HasFactory;

    protected $fillable = [
         'parent_id','title','description','status',];

    public function parent()
    {
    return $this->belongsTo(Category::class);
    }


    public function children(){
        return $this->hasMany(Category::class,'parent_id');
    }

}

我的 ShowCategoryController :

 public function index($id)
    {

        //all parent categories
        $parent_categories = Category::with('children')->whereNull('parent_id')->get();


        //show categories in navigation
        $nav_categories = $parent_categories->take(7);


        //show categories details (subcategories,posts and tags)
        $show_categories = $parent_categories->find($id)->get();


        return view('home.showcategory',compact('show_categories','nav_categories'));
    }

显示类别刀片:

@extends('home.mainlayout')

@section('content')

@foreach($show_categories as $show_category)

@foreach($show_category->children as $child)
<div>
   <h2 style="text-align: center">{{ $child->title }}</h2>
</div>
@endforeach
@endforeach
@endsection

导航刀片:

 @foreach($nav_categories as $nav_category)
    <li class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown" href="#"> {{ $nav_category->title }} <span class="caret"></span></a>
        <ul class="dropdown-menu" >
          @foreach($nav_category->children as $child)
             <li><a href="#">{{ $child->title }}</a></li>
          @endforeach
          <li><a href="{{ route('show_category',$nav_category->id)  }}">more</a></li>
        </ul>
      </li>
    @endforeach

和家庭控制器:

public function index()
    {

        //for show categories in nvaigation
        $nav_categories = Category::with(['children' => function($q) { $q->take(7); }])
        ->whereNull('parent_id')->get();


        return view('home.home',compact('nav_categories' ));
    }

谢谢你的帮助:)

解决方法

我不清楚您正在使用的确切代码。 尝试将模型中的父方法更改为

 public function parent()
    {
    return (new static)::whereNull('parent_id')->get();
    }

并相应地重新排列控制器。 现在您的控制器在 $parent_category 和 $show_categories 中两次从模型中获取几乎相同的数据。可能会导致 n+1 查询问题。希望我的想法是对的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?