Mar 10, 2022
0
Level 4
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'));
}
}
Please or to participate in this conversation.