Lin Aung
Lin Aung

Reputation: 427

How to split query builder in laravel 5.2?

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

Answers (3)

Dilip Hirapara
Dilip Hirapara

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

LS Computer School
LS Computer School

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

Yasin Patel
Yasin Patel

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

Related Questions