Отображение подкатегорий и количества товаров в основной категории - PullRequest
0 голосов
/ 22 октября 2018

Я новичок в Laravel и пытаюсь немного научиться, пока создаю проект "реального мира".

Мой проект классифицирован как сайт.В настоящее время я нахожусь на этапе, где я должен показать все категории, подкатегории и количество предметов в каждой подкатегории.

В базе данных я веду историю всех категорий (основных и вспомогательных) в таблице с именем categories.Существует столбец с именем parent_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

То, что я пробовал для подкатегорий, это добавить один if внутри foreach

@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

Ошибка

Неопределенное свойство: Illuminate\ База данных \ Eloquent \ Collection :: $ title

Когда я {{ dd($allCategories) }} вижу, что они в массиве.

1 Ответ

0 голосов
/ 22 октября 2018

Ваше отношение children вернет коллекцию, а не одну модель, из-за этого вы должны циклически просмотреть детей:

@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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...