Php 项目计数为';t显示在父类别上

Php 项目计数为';t显示在父类别上,php,laravel,laravel-5,Php,Laravel,Laravel 5,我正在尝试显示父类别和子类别上的项目计数。到目前为止,计数仅在子类别上可见,但当项目仅分配给父目录时,计数显示为0。我已经在我的类别中添加了这个 public function addRelation( $categoires ) { $categoires->map(function( $item, $key) { $sub = $this->selectChild($item->id); $item->

我正在尝试显示父类别和子类别上的项目计数。到目前为止,计数仅在子类别上可见,但当项目仅分配给父目录时,计数显示为
0
。我已经在我的
类别中添加了这个

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();
    }
}
在控制器中

    $Category = new Category;
    $allCategories = $Category->getCategories();
    return view('home', compact('allCategories'));
在我的刀刃上

@foreach($allCategories as $category)
  <div class="card-body">
    <h4 class="card-title">{!!$category->title!!} <span class="badge badge-primary badge-pill">({!! $category->itemCount !!})</span></h4>
  </div>
@endforeach
@foreach($allCategories作为$category)
{!!$category->title!!}({!!$category->itemCount!!})
@endforeach

itemCount
是(0),当项目位于
Parent
类别中时。

经过我们的讨论后,这是一个简单的查询,您只需要这样做:

public function getItemCount( $category_id)
{
    return Item::where('category_id', $category_id)->count();
}
或者,如果你有关系,你可以这样做:

public function addRelation( $categoires )
{

  $categoires->map(function( $item, $key)
  {             
        $sub = $this->selectChild($item->id);
        $item->itemCount = $item->items()->count();
        return $item = array_add($item, 'subCategory', $sub);
    });
    return $categoires;
}

经过讨论,我们得到了一个简单的查询,您只需要这样做:

public function getItemCount( $category_id)
{
    return Item::where('category_id', $category_id)->count();
}
或者,如果你有关系,你可以这样做:

public function addRelation( $categoires )
{

  $categoires->map(function( $item, $key)
  {             
        $sub = $this->selectChild($item->id);
        $item->itemCount = $item->items()->count();
        return $item = array_add($item, 'subCategory', $sub);
    });
    return $categoires;
}

你的逻辑有问题!!在任何情况下,else块都不会始终只执行第一个要执行的块!!还有一件事,您可以将集合
$ids
转换为如下数组
$ids->toArray()
而无需在其项上循环;)你们知道你们应该怎么做了吗???@Maraboc,否则执行block。在foreach中,我有另一个foreach,它接受子类别。正如我在问题中所说的那样,它正在发挥作用,这就是为什么我把它从问题中删除的原因。不,我没有弄清楚如何显示主类别中的项目计数。我还认为计数器应该计算所有子类别中的所有项目。好的,假设您有一个cat(id=1,parent_id=0)。这只cat有一个与它直接相关的项目,如果有或没有,将执行bloc?您的逻辑有问题!!在任何情况下,else块都不会始终只执行第一个要执行的块!!还有一件事,您可以将集合
$ids
转换为如下数组
$ids->toArray()
而无需在其项上循环;)你们知道你们应该怎么做了吗???@Maraboc,否则执行block。在foreach中,我有另一个foreach,它接受子类别。正如我在问题中所说的那样,它正在发挥作用,这就是为什么我把它从问题中删除的原因。不,我没有弄清楚如何显示主类别中的项目计数。我还认为计数器应该计算所有子类别中的所有项目。好的,假设您有一个cat(id=1,parent_id=0)。这只cat有一个与它直接相关的项目,如果有,将执行该项目。再次感谢您的帮助@彼得看到对话了吗@彼得,问题还在吗?是的。当我订购了两个产品,并且两个产品都有休假审查时,这会发生->按钮“休假审查”会显示在两个产品上。就像我附在问题上的图片一样。@Peter我们可以讨论一下吗?再次感谢您的帮助@彼得看到对话了吗@彼得,问题还在吗?是的。当我订购了两个产品,并且两个产品都有休假审查时,这会发生->按钮“休假审查”会显示在两个产品上。就像我附在问题上的图片一样。@Peter我们可以讨论一下吗