在Laravel查询中隐藏计数器中未发布的项目

时间:2017-10-23 05:14:39

标签: php laravel laravel-5

我在主要类别下显示所有子类别。在每个子类别上都有一个计数器,其中分配了多少项目。

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);   

1 个答案:

答案 0 :(得分:1)

您必须在item模型的关系函数Category.php中添加where条件。

以下是代码:

public function item()
{
    return $this->hasMany('App\Item','category_id')->where('published', 1);
}