显示子类别和主类别下的项目数
Showing sub-categories and number of items under the main category
我是 Laravel 的新手,在构建 "real world" 项目的同时尝试学习一些知识。
我的项目是分类站点。目前,我正在进行显示所有类别、子类别和每个子类别下的项目数量的步骤。
我在数据库中记录了 table 中的所有类别(主要和子),称为 categories
。有一个名为 parent_id
的列,它是父类别的 ID(如果是子类别)。
在模型中Category.php
我有
public function item()
{
return $this->hasMany('Item','category_id');
}
public function children()
{
return $this->hasMany('App\Category', 'parent_id');
}
public function getCategories()
{
$categoires = Category::where('parent_id',0)->get();
$categoires = $this->addRelation($categoires);
return $categoires;
}
public function selectChild( $id )
{
$categoires = Category::where('parent_id',$id)->get();
$categoires = $this->addRelation($categoires);
return $categoires;
}
public function addRelation( $categoires )
{
$categoires->map(function( $item, $key)
{
$sub = $this->selectChild($item->id);
$item->itemCount = $this->getItemCount($item->id , $item->parent_id );
return $item = array_add($item, 'subCategory', $sub);
});
return $categoires;
}
public function getItemCount( $category_id, $parent_id )
{
if( $parent_id == 0)
{ // for root-caregory
$ids = Category::select('id')->where('parent_id', $category_id)->get();
$array = array();
foreach ($ids as $id)
{
$array[] = $id->id;
}
return Item::whereIn('category_id', $array )->count();
}
else
{
return Item::where('category_id', $category_id)->count();
}
}
在我的控制器中
public function index()
{
$Category = new Category;
$allCategories = $Category->getCategories();
return view('frontend.home', compact('allCategories'));
}
在视图中,这是我显示父类别的方式
@foreach($allCategories as $cats)
<li><a href="#">{{ $cats->title }}</a>/li>
@endforeach
我为子类别尝试的是在 foreach
中添加一个 if
@foreach($allCategories as $cats)
<li><a href="#">{{ $cats->title }}</a>
<ul class="sub-category">
@if ($cats->children())
<li><a href="#"> {{ $cats->children->title }} </a></li>
@endif
</ul>
</li>
@endforeach
错误是
Undefined property: Illuminate\Database\Eloquent\Collection::$title
当我 {{ dd($allCategories) }}
我看到它们在数组中。
您的 children
关系将 return 是一个集合而不是单个模型,因此您还必须遍历子项:
@foreach($allCategories as $cats)
<li><a href="#">{{ $cats->title }}</a>
<ul class="sub-category">
@if($cats->children)
@foreach($cats->children as $child)
<li><a href="#"> {{ $child->title }} </a></li>
@endforeach
@endif
</ul>
</li>
@endforeach
我是 Laravel 的新手,在构建 "real world" 项目的同时尝试学习一些知识。
我的项目是分类站点。目前,我正在进行显示所有类别、子类别和每个子类别下的项目数量的步骤。
我在数据库中记录了 table 中的所有类别(主要和子),称为 categories
。有一个名为 parent_id
的列,它是父类别的 ID(如果是子类别)。
在模型中Category.php
我有
public function item()
{
return $this->hasMany('Item','category_id');
}
public function children()
{
return $this->hasMany('App\Category', 'parent_id');
}
public function getCategories()
{
$categoires = Category::where('parent_id',0)->get();
$categoires = $this->addRelation($categoires);
return $categoires;
}
public function selectChild( $id )
{
$categoires = Category::where('parent_id',$id)->get();
$categoires = $this->addRelation($categoires);
return $categoires;
}
public function addRelation( $categoires )
{
$categoires->map(function( $item, $key)
{
$sub = $this->selectChild($item->id);
$item->itemCount = $this->getItemCount($item->id , $item->parent_id );
return $item = array_add($item, 'subCategory', $sub);
});
return $categoires;
}
public function getItemCount( $category_id, $parent_id )
{
if( $parent_id == 0)
{ // for root-caregory
$ids = Category::select('id')->where('parent_id', $category_id)->get();
$array = array();
foreach ($ids as $id)
{
$array[] = $id->id;
}
return Item::whereIn('category_id', $array )->count();
}
else
{
return Item::where('category_id', $category_id)->count();
}
}
在我的控制器中
public function index()
{
$Category = new Category;
$allCategories = $Category->getCategories();
return view('frontend.home', compact('allCategories'));
}
在视图中,这是我显示父类别的方式
@foreach($allCategories as $cats)
<li><a href="#">{{ $cats->title }}</a>/li>
@endforeach
我为子类别尝试的是在 foreach
中添加一个if
@foreach($allCategories as $cats)
<li><a href="#">{{ $cats->title }}</a>
<ul class="sub-category">
@if ($cats->children())
<li><a href="#"> {{ $cats->children->title }} </a></li>
@endif
</ul>
</li>
@endforeach
错误是
Undefined property: Illuminate\Database\Eloquent\Collection::$title
当我 {{ dd($allCategories) }}
我看到它们在数组中。
您的 children
关系将 return 是一个集合而不是单个模型,因此您还必须遍历子项:
@foreach($allCategories as $cats)
<li><a href="#">{{ $cats->title }}</a>
<ul class="sub-category">
@if($cats->children)
@foreach($cats->children as $child)
<li><a href="#"> {{ $child->title }} </a></li>
@endforeach
@endif
</ul>
</li>
@endforeach