2016-07-26 6 views
0

メインカテゴリとサブカテゴリをメニューに取り込む簡単なクエリがあります。この作品は完全にメニューにサブカテゴリを表示するのは、Laravelの商品がある場合のみです。

// in controller 
$cat=Categories::all(); 
View::share('categories_menu',$cat); 

// in view 
@foreach($categories_menu as $category_menu) 
    @if($category_menu->has('subcategories')) 
     <ul class="nav nav-stacked cat-nav"> 
       <li> 
        <a href="#">{{ $category_menu['category_name'] }} </a> 
         @if($category_menu->subcategories->count()) 
          <ul> 
          @foreach($category_menu->subcategories as $subcategory) 
           <li class=""><a href="#">{{$subcategory->sub_cat_name}}</a></li> 
          @endforeach 
          </ul> 
         @endif 
       </li> 
      @else 
       <li><a href="#"><i class="fa fa-link"></i> <span>{{ $category_menu->category_name }}</span></a></li> 
      @endif 
     </ul> 
@endforeach 

これは

Main Category 
    -Sub Cat 
    -Sub Cat 
Second main category 
    -Sub in second main category 
    ... 

のような出力を作る問題は、それが空でも、サブカテゴリをロードしているということです。結果は奇妙な(画像)である。これは、これまで

$cat = Categories::select('*', DB::raw('category.category_id AS category_id')) 
    ->leftJoin('products', function($join) { 
      $join->on('products.category_id', '=', 'category.category_id'); 
      }) 
    ->leftJoin('sub_category', function($secondjoin){ 
      $secondjoin->on('sub_category.category_id', '=', 'category.category_id'); 
      }) 
    ->whereNotNull('products.sub_cat_id') 
    ->get(); 

クエリですcategorysub_categoriesproducts

- 私はそれらを表示したくないと私はすべての3つのテーブルを結合して、クエリを変更しようとしました enter image description here

それぞれに1つのサブが2つあるメインカテゴリのみを表示する必要があります。いくつかのより多くのソースまたは私が提供できる何かが必要な場合は、画像の上に、あなたは私の製品テーブル

Category 1 
    -sub1 
Category 2 
    -sub3 

enter image description here

を見ることができます。モデルと

更新:

カテゴリーモデル

class Categories extends Eloquent { 
    protected $table = 'category'; 
    protected $primaryKey = 'category_id'; 

    public $timestamps = false; 

    public function products() 
    { 
     return $this->hasMany('Product', 'category_id'); 

    } 
    public function subcategories() 
    { 
     return $this->hasMany('SubCategories', 'category_id'); 
    } 
} 

のサブカテゴリモデル

class SubCategories extends Eloquent { 
    protected $table = 'sub_category'; 
    protected $primaryKey = 'sub_cat_id'; 

    public $timestamps = false; 

    public function category() 
    { 
     return $this->belongsTo('Category', 'category_id'); 
    } 

    public function products() 
    { 
     return $this->hasMany('Product', 'sub_cat_id'); 
    } 
} 

製品モデル

class Product extends Eloquent { 
    protected $table = 'products'; 
    protected $primaryKey = 'product_id'; 

    public function categories() 
    { 
     return $this->hasMany('Categories', 'category_id'); 
    } 

    public $timestamps = false; 
} 
+0

Eloquantの関係を見ると、多くの労力を節約できます – Vuldo

+0

私はそれらを既に持っています...私のモデルのテーブル間の関係。 –

+0

メインポストに追加できますか?巨大な質問をする方が簡単になる – Vuldo

答えて

1
@foreach($categories_menu as $category_menu) 
    @if($category_menu->has('subcategories')) 
     <ul class="nav nav-stacked cat-nav"> 
       <li> 
        <a href="#">{{ $category_menu['category_name'] }} </a> 
         @if($category_menu->subcategories->count()) 
          <ul> 
          @foreach($category_menu->subcategories as $subcategory) 
           @if($subcategory->products->count()) 
           <li class=""><a href="#">{{$subcategory->sub_cat_name}}</a></li> 
           @endif 
          @endforeach 
          </ul> 
         @endif 
       </li> 
      @else 
       <li><a href="#"><i class="fa fa-link"></i> <span>{{ $category_menu->category_name }}</span></a></li> 
      @endif 
     </ul> 
@endforeach 

サブカウンターの条件は、商品数が0を超えている場合にのみ表示されるようにしました。

+0

ありがとうございます。しかし、どのクエリですか?私は画像と同じ結果が得られるが、サブカテゴリは画像に一度同じように2回あるわけではないので、 –

+0

ああ得た。最初のクエリ '$ cat = Categories :: all();' –

+1

初期クエリではい – Vuldo

関連する問題