Да не се показват празни подкатегории в Laravel

vinsbg

Registered
Здравейте,

Кажете как мога да направя това, че цял ден не мога да разбера. Имам меню с категории. Всяка категория може да има много под-категории. Когато се избере главна категория зарежда страница с под-категориите

Когато се добавя продукт се избира в коя под-категория да бъде, но може да се случи някоя под-категория да няма продукт и точно тук е прблема. Искам ако в под-категорията няма добавен продукт просто да не се показва при останали.

В таблицата с продукти имам една колона sub_cat_id и там записвам ID-то на под-категорията. Т.е. трябва да се провери ако id-то на под-категорията го няма в таблицата продукти значи няма добавени продукти.

Това ми е таблицата за под-категории - sub_categories
Код:
sub_cat_id
category_id
category таблица
Код:
category_id
category_name
...
Таблица products
Код:
product_id
...
category_id
sub_cat_id

Това ми е контролера
Код:
    public function showSubCats($categoryId) {

	 $cat_name = Categories::where('category_id', '=', $categoryId)->get();		   	 
         $subcats = SubCategories::where('category_id', '=', $categoryId)->where('sub_cat_id', '=', '0')->get();
//$subcats = SubCategories::where('category_id', '=', $categoryId)->where('sub_cat_id', '!=', '0')->get();

         return View::make('site.subcategory', [            
              'subcats' => $subcats,
              'cat_name' => $cat_name
             
         ]); 
    }
Най-вероятно трябва да проверя дали изобщо съществува id-то на под-категорията в таблицата продукти.. или и аз не знам как точно.

пробвах с whereNotNull, whereNull и какво ли не..
 
Според мен, малко грешно и заобиколно си го тръгнал, но може да е това да е точно което искаш, или пък не знам, но знам, че ..

Трябва ти рилейшън между моделите на категориите и продуките.
Пример:
PHP:
Class Category ..
{
 .. 
 public function products()
 {
    return $this->hasMany("\App\Models\Products\Product");
}
 ..
}

Трябва ти прост count :
PHP:
$categories = Category::get(); // твоите филтри
if( count( $categories ->products) ) 
{
  .. има продукти -> покажи
}

3. Тъй като не ти знам стуктурата на БД нито моделите съм дал пример, ти трябва да следваш логиката и да го вградиш в твоя код. Може и аз да съм в грешка, ако е така, извинявай. Дано съм помогнал. :idea: :?:
 
Аз в моделите съм го описал мисля, както трябва.. това ми е модела за категориите
Код:
public function products()
    {
        return $this->hasMany('Product', 'category_id');
        
    } 
    public function subcategories()
    {
        return $this->hasMany('SubCategories', 'category_id');
    }
модела на под-категориите
Код:
    public function category()
    {
        return $this->belongsTo('Category', 'category_id');
    }
    
    public function products()
    {
       return $this->hasMany('Product', 'sub_cat_id');
      //return $this->hasMany('Product', 'sub_cat_id')->where('sub_cat_id', '>', 0);
    }
и модела на продуктите
Код:
    public function categories()
    {
        return $this->hasMany('Categories', 'category_id');
    }
 
Мисля, че работата стана с leftJoin query
Код:
     $subcats = SubCategories::select('*', DB::raw('sub_category.sub_cat_id AS sub_cat_id'))
		->leftJoin('products', function($join) {
				 $join->on('products.sub_cat_id', '=', 'sub_category.sub_cat_id'); 
			   })
	        ->where('sub_category.category_id', '=', $categoryId)
	        ->whereNotNull('products.sub_cat_id')
	        ->get();
 

Back
Горе