Боковая панель с выпадающим меню из базы данных - PullRequest
0 голосов
/ 29 апреля 2018

Я пытаюсь использовать базу данных для добавления пунктов меню на боковую панель на моем сайте. Моя база данных имеет следующую структуру:

ID / Product_Name/ Product_Type
1 / product1 / type1
2 / product2 / type1
3 / product3 / type2
4 / product4 / type2

Мне нужна боковая панель, в которой каждый тип указан в качестве пункта меню, а продукты, принадлежащие этому типу, являются элементами подменю:

  Type1
    product1 
    product2 
  Type2
    product3
    product4

Однако, используя мой текущий код, я получаю каждый пункт меню, но в моем подменю отображаются все продукты во всей базе данных, а не только продукты, принадлежащие к этому типу.

Мой контроллер:

public function index()
{

    //get all products
    $products = Product::all();  

    //get each type
    $types = Product::distinct()->get(['Type']);

    return view('pages.getstarted')->with('products', $products)                                       
                                   ->with('types', $types);
}

Мой взгляд:

<ul class="list-sidebar">                                
  @foreach($types as $type)
    <li class="header">
      <a href="#" data-toggle="collapse" data-target="#1">{{$type->Type}}<span class="fa fa-chevron-left pull-right"></span></a>
      <ul class="sub-menu collapse" id="1">
        @foreach($products as $product)
          <li><a href="1">{{$product->Product_Name}}</a></li>
        @endforeach
      </ul>
    </li>   
  @endforeach 
</ul>    

Я очень новичок в Laravel, поэтому любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Просто немного измените свой контроллер и вид с помощью метода groupBy из экземпляра Collection:

Документация

Контроллер

public function index()
{
    //get all products
    $products = Product::all();  

    return view('pages.getstarted')->with('products', $products);
}

View

<ul class="list-sidebar">
    @foreach($products->groupBy('Product_Type') as $type => $subCollection)
    <li class="header">
        <a data-target="#1" data-toggle="collapse" href="#">
            {{$type}}
            <span class="fa fa-chevron-left pull-right"></span>
        </a>
        <ul class="sub-menu collapse" id="1">
            @foreach($subCollection as $product)
            <li>
                <a href="1">{{$product->Product_Name}}</a>
            </li>
            @endforeach
        </ul>
    </li>
    @endforeach
</ul>
0 голосов
/ 29 апреля 2018

Начиная с $types, выполните следующие действия:

    $menu = [];
    foreach ($types as $type){
      $products = Product::where('Product_Type', $type->Product_Type)->get();
       foreach ($products as $product){
          $menu[$type->Product_Type][] = $product->Product_Name;
       }
    }
return view('pages.getstarted',['menu' => $menu]);

Тогда в представлении:

<ul>
@foreach($menu as $type)
 <li>{{$type}}<ul>
  @foreach($type as $item)
   <li>{{$item}}</li>
  @endforeach
  </ul></li>
@endforeach
</ul>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...