Reputation: 427
I have three variables and I only want to add certain where clause if those variables are not null or blank.
$brand = $request->brand == 0 ? "" : $request->brand ;
$category = $request->category == 0 ? "" : $request->category ;
$subcategory = $request->subcategory == 0 ? "" : $request->subcategory;
$items = Item::select('items.*','brands.brand_name','category.category_name','subcategory.subcategory_name')
->leftJoin('brands','items.brand_id','=','brands.id')
->leftJoin('category','items.category_id','=','category.id')
->leftJoin('subcategory','items.subcategory_id','=','subcategory.id');
if($brand != ""){
$items->where('items.brand_id',$brand);
}
if($category != ""){
$items->where('items.category_id',$category);
}
if($subcategory != ""){
$items->where('items.subcategory_id',$subcategory);
}
$items->get();
Now I am getting below error
'Illuminate\Database\Eloquent\Builder could not be converted to string'
Upvotes: 0
Views: 655
Reputation: 15296
Try to use this part as like this. assign your $items
variable every condition.
$items = Item::select('items.*','brands.brand_name','category.category_name','subcategory.subcategory_name')
->leftJoin('brands','items.brand_id','=','brands.id')
->leftJoin('category','items.category_id','=','category.id')
->leftJoin('subcategory','items.subcategory_id','=','subcategory.id');
if($brand != ""){
$items = $items->where('items.brand_id',$brand);
}
if($category != ""){
$items = $items->where('items.category_id',$category);
}
if($subcategory != ""){
$items = $items->where('items.subcategory_id',$subcategory);
}
$items = $items->get();
Upvotes: 2
Reputation: 21
$Items = DB::table('Item')
->join('brands','items.brand_id','=','brands.id')
->Join('category','items.category_id','=','category.id')
->Join('subcategory','items.subcategory_id','=','subcategory.id');
->select('items.*','brands.brand_name','category.category_name',
'subcategory.subcategory_name')
->get();
dd($Items);
Upvotes: 0
Reputation: 5731
$items
is an Eloquent Builder instance so take output in other variable:
$items = Item::select('items.*','brands.brand_name','category.category_name','subcategory.subcategory_name')
->leftJoin('brands','items.brand_id','=','brands.id')
->leftJoin('category','items.category_id','=','category.id')
->leftJoin('subcategory','items.subcategory_id','=','subcategory.id');
if($brand != ""){
$items->where('items.brand_id',$brand);
}
if($category != ""){
$items->where('items.category_id',$category);
}
if($subcategory != ""){
$items->where('items.subcategory_id',$subcategory);
}
$data = $items->get();
Upvotes: 2