我在主要类别下显示所有子类别。在每个子类别上都有一个计数器,其中分配了多少项目。
Main Category
- Sub Category (1)
- Sub Category (3)
- etc
目前的问题是可以发布和取消发布一个项目。当项目尚未发布时,我不想在柜台上显示它。 items
表格中的列为published
,接受1
表示已发布,0
表示未发布。
这是我必须在页面
上显示的内容 HomeController.php
$allCategories = Category::where('parent_id', 0)->has('children.item')
->with(['children'=> function($query){
$query->withCount('item');
}])
->get()
->each(function($parentCategory){
$parentCategory->item_count = $parentCategory->children->sum(function ($child) { return isset($child->item_count)?$child->item_count:0;});
});
我的Item.php模型
public function category()
{
return $this->belongsTo('App\Category');
}
我的Category.php模型
public function item()
{
return $this->hasMany('App\Item','category_id');
}
public function parent()
{
return $this->belongsTo('App\Category', 'id', 'parent_id');
}
public function children()
{
return $this->hasMany('App\Category', 'parent_id', 'id');
}
我试图直接将其添加到查询中,但没有任何区别
$query->withCount('item')->where('published', 1);
答案 0 :(得分:1)
您必须在item
模型的关系函数Category.php
中添加where条件。
以下是代码:
public function item()
{
return $this->hasMany('App\Item','category_id')->where('published', 1);
}