Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

Constantine_92's avatar

hi guys i try bring extra_subcategories on subcategories i think that if i put wire click and fuction do the query its easy to play but not working , the reason that propably not working are when i selected 2 subcategories not update array

My livewire code

		public $SelectedCat ;
public $categories= [];
public $subcategories= [];
public $extra_subcategories= [];
public $SelectedSubCat = [];
public $SelectedExtraSubCat = [];
public $SelectedTag = [];
public $SelectedAddress = [];
public $search="";
public $searchTag="";
public $searchAddress="";
public $location="";
public $filter = "";
public $condition= [];
public $min_price ="";
public $max_price ="";

my function for subcategories

			protected function AddSubcategories(){
    $tempSubcategories = DB::table('subcategories')->select(['subcategories.name', 'subcategories.id','product_category_subcategory.product_category_id',])
            ->join('product_category_subcategory', 'product_category_subcategory.subcategory_id','=','subcategories.id')
            ->where('product_category_subcategory.product_category_id', $this->SelectedCat)
            ->get()->toArray();

            $finalSubcategories = array();
                foreach( $tempSubcategories as $tempSubcategory){
                $finalSubcategories[] = (array) $tempSubcategory;
            }
            $this->subcategories = $finalSubcategories;
            
            
}

my function for extra_subcategories

				public function AddExtraSubcategories(){
 
            
            $tempExtraSubcategories = DB::table('extra_subcategories')->select(['extra_subcategories.name_extrasubcategories', 'extra_subcategories.id','extra_subcategory_subcategory.subcategory_id',])
                         ->join('extra_subcategory_subcategory', 'extra_subcategory_subcategory.extra_subcategory_id','=','extra_subcategories.id')
                        //  ->where('extra_subcategory_subcategory.subcategory_id', array_keys($this->SelectedSubCat))->get()->toArray();
                        ->when($this->SelectedSubCat  = array_filter($this->SelectedSubCat),function($query)
                        {
                            return $query->where('extra_subcategory_subcategory.subcategory_id', array_keys($this->SelectedSubCat));
                        })->get()->toArray();
            $finalExtraSubcategories = array();
                 foreach( $tempExtraSubcategories as $tempExtraSubcategory){
                 $finalExtraSubcategories[] = (array) $tempExtraSubcategory;
             }
             $this->extra_subcategories = $finalExtraSubcategories; 
            //   dd($finalExtraSubcategories);
            
}

mount my categories and subcategories

			 public function mount()
{ 
    $this->categories =ProductCategory::orderBy('name','desc')->get()->toArray();
    $this->AddSubcategories();
//    dd($this->SelectedSubCat );

after function update for categories

				   public function updatedSelectedCat($value)
{    
    switch ($value) {
        case 1:
            $this->AddSubcategories();
            // $this->AddExtraSubcategories();
       // dd($SelectedCat,$finalSubcategories);
            if( !($this->SelectedSubCat) <=3  ){
                $this->SelectedSubCat = [];
            }
            // if( !($this->SelectedExtraSubCat)<=5 ){
            //     $this->SelectedExtraSubCat = [];
            // }
            break;
        case 2:
            $this->AddSubcategories();
            $this->SelectedExtraSubCat = [];
       // dd($SelectedCat,$finalSubcategories);
            if(!($this->SelectedSubCat) <=8 ){
                $this->SelectedSubCat = [];
                
                
               
            }
            break;
        case 3:
            $this->AddSubcategories();
       // dd($SelectedCat,$finalSubcategories);
            if(!($this->SelectedSubCat) <=13 ){
                $this->SelectedSubCat = [];
                $this->extra_subcategories = [];
               
               
            }
            break;
        case 4:
            $this->AddSubcategories();
       // dd($SelectedCat,$finalSubcategories);
            if(!($this->SelectedSubCat) <=17 ){
                $this->SelectedSubCat = [];
               
                
            }
            break;
        case 5:
            $this->AddSubcategories();
           
       // dd($SelectedCat,$finalSubcategories);
            if(!($this->SelectedSubCat) <=23 ){
                $this->SelectedSubCat = [];
            }
            break; 
        case 6:
            $this->AddSubcategories();
          
       // dd($SelectedCat,$finalSubcategories);
            if(!($this->SelectedSubCat) <=34 ){
                $this->SelectedSubCat = [];
                
               
            }
            break; 
        case 7:
            $this->AddSubcategories();
           
       // dd($SelectedCat,$finalSubcategories);
            if(!($this->SelectedSubCat) <=37 ){
                $this->SelectedSubCat = [];
             
               
            }
            break;     
          case 8:
            $this->AddSubcategories();
       // dd($SelectedCat,$finalSubcategories);
            if(!($this->SelectedSubCat) <=43 ){
                $this->SelectedSubCat = [];
              
                
            }
            break; 
            
            
        case "":
            echo "i equals 2";
            break;
    }
    

} 

and finally render my products filter

		public function render()
{
    // $extra_subcategories=  DB::table('extra_subcategories')->select(['extra_subcategories.name_extrasubcategories', 'extra_subcategories.id','extra_subcategory_subcategory.subcategory_id',])
    //  ->join('extra_subcategory_subcategory', 'extra_subcategory_subcategory.extra_subcategory_id','=','extra_subcategories.id')->get();
    $tags = ProductTag::when(strlen($this->searchTag) >= 1, function ($query) {
        return $query->where('name', 'like', '%'.$this->searchTag.'%');            
    })->get();
    $address = Address::when(strlen($this->searchAddress) >= 1, function ($query) {
        return $query->where('name', 'like', '%'.$this->searchAddress.'%');            
    })->get();
    $count_items = Product::count();
    // dd($extra_subcategories);
    $items = Product::with(['categories'])
    ->when($this->SelectedCat ,function($query)
    {
        return $query->whereHas('categories', function($query) {
             return $query->where('product_category_id', $this->SelectedCat);
        });
    })
    ->when($this->SelectedSubCat  = array_filter($this->SelectedSubCat),function($query)
    {
        return $query->whereHas('subcategories', function($query) {
             return $query->whereIn('subcategory_id', array_keys($this->SelectedSubCat));
        });
    })
    ->when($this->SelectedTag = array_filter($this->SelectedTag),function($query)
    {
        return $query->whereHas('tags', function($query) {
             return $query->whereIn('product_tag_id', array_keys($this->SelectedTag));
        });
    })
    ->when($this->SelectedAddress = array_filter($this->SelectedAddress),function($query)
    {
        return $query->whereHas('addresses', function($query) {
             return $query->whereIn('address_id', array_keys($this->SelectedAddress));
        });
    })
    ->when(strlen($this->search) >= 3, function ($query) {
        return $query->where('name', 'like', '%'.$this->search.'%');            
    })
    ->when($this->filter && $this->filter === 'Cheapest', function ($query) {
        return $query->orderBy('price','asc');
    })
    ->when($this->filter && $this->filter === 'Latest items', function ($query) {
        return $query->orderBy('created_at','desc');
    })
    ->when($this->condition = array_filter($this->condition) ,function($query)
    {
         return $query->whereIn('item_condition', array_keys( $this->condition));
       
    })
    ->when($this->min_price !=='' || $this->max_price !=='' , function($query) 
        {
            return $query->whereBetween('price', [$this->min_price,$this->max_price]);
        });

    $items =$items->paginate(9);
    // dump($this->SelectedSubCat);

    return view('livewire.list-filter-items',[
        'categories' => $this->categories,
        'subcategories' =>$this->subcategories,
        'extra_subcategories' =>$this->subcategories,
    ],compact('items','tags','count_items','address'));
}
}
0 likes
0 replies

Please or to participate in this conversation.