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

cyw691205's avatar

How can i query by user input?

i want query products by user input keword or category. but this code is not work...

public function index(Request $request) { // $keyword = $request['keyword']; $catgory_id = $request['catgory_id '];

    if($catgory_id ){
        $ps = Category::find($catgory_id )->products()->where('status', 1);
    }else{
        $ps = Product->where('status', 1);
    }

    if($keyword){
        $ps->andWhere(function($query){
            $query->where('name','like','%'.$keyword.'%')
            ->orWhere('introduce','like','%'.$keyword.'%')
            ->orWhere('itemid','like','%'.$keyword.'%');
        });
    }
    
    $ps->orderBy('created_at', 'desc')->paginate(20);
0 likes
4 replies
Cinek's avatar

What does it mean "this code is not work"? We need more details

cyw691205's avatar

Oh~ I mean in Laravel seems you must use $result = Product::where(...)->orderBy(...)->get(); to query data , it work fine.

but you can't create a object at first like $result = new Product(); and call $result->where()->get(); later , that will get no result.

if there any way to do i can create a object first and call where()->get() later?

ekhlas's avatar

Replace

if($catgory_id ){
        $ps = Category::find($catgory_id )->products()->where('status', 1);
    }else{
        $ps = Product->where('status', 1);
    }

    if($keyword){
        $ps->andWhere(function($query){
            $query->where('name','like','%'.$keyword.'%')
            ->orWhere('introduce','like','%'.$keyword.'%')
            ->orWhere('itemid','like','%'.$keyword.'%');
        });
    }
    
    $ps->orderBy('created_at', 'desc')->paginate(20);

with

if($catgory_id ){
        $ps = Category::find($catgory_id )->products()->where('status', 1);
    }else{
        $ps = Product->where('status', 1);
    }

    if($keyword){
        $ps =$ps->andWhere(function($query){
            $query->where('name','like','%'.$keyword.'%')
            ->orWhere('introduce','like','%'.$keyword.'%')
            ->orWhere('itemid','like','%'.$keyword.'%');
        });
    }
    
    $ps =$ps->orderBy('created_at', 'desc')->paginate(20);

Please or to participate in this conversation.