Laravel 5 - produkty bez kategorii

0

listuję sobie produkty. Na listą mam filtr: pokaż produkty z lub bez kategorii. Opcja "nie przypisane" nie działa

$product = Products::select('products.id', 'products.name', 'products.type', 'products.product_code', 'products.manufacturers_code', 'products.active', 'manufacturers.name as manufacturer')->leftJoin('manufacturers', function ($join)
        {
            $join->on('products.manufacturers_id', '=', 'manufacturers.id');
        });

tutaj kod po wybraniu filtra z dropdowna

if($catetoryFilter != 'W' && $categoryFilter != '')
        {

            if($categoryFilter == 'N') 
            {
                // problem jest tutaj, bo gdy produkt nie ma kategorii to to podzapytanie zwraca pusty wynik.
                $productsDB->where(DB::raw("(SELECT COUNT(products_categories.products_id) FROM products_categories
                    
                                WHERE products_categories.products_id = products.id
                    
                                GROUP BY products_categories.products_id)"), '=', 0);
            }
            else
            {
                // tutaj jest ok, działa
                $productsDB->where(DB::raw("(SELECT COUNT(products_categories.products_id) FROM products_categories
                    
                                WHERE products_categories.products_id = products.id
                    
                                GROUP BY products_categories.products_id)"), '>', 0);
            }
        }
0

Czemu lecisz na joinach? Użyj relacji eloquentowych.

0

zrobiłem na ten moment tak

$products->where(DB::raw("(products.id in (
                
                                SELECT p.id from products p left join products_categories c on p.id = c.products_id where c.id is null
                                
                                ))"), '>', 0);
0

Ręcznie testowałeś to podzapytanie i masz wynik 0 w tym count? Nie wiem jaka wersja Laravel ale w początkowych piątkach czasem dziwnie mi parsował where i nie porównywał wyniku zapytania jako int tylko jako string. Była metoda whereLose() gdzie nie porównywał typu tylko wartości.

0

nie, tam właśnie nigdy nie będzie 0. Kiedy produkt nie jest spięty z kategorią wynik tego podzapytania jest pusty.
poprawione podzapytanie działa ok.

1 użytkowników online, w tym zalogowanych: 0, gości: 1