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

Jarjis's avatar

Unwanted date gets

Everything is okay but when I am searching post by title using like query it shows another category data. How can I get exact category data with filtering?

$literacies = Literacy::whereHas('categories',function ($query) use ($request,$slug){
                return $query->where('slug',$slug);
            })->when($request->title,function ($query,$title){
                return $query->where('title', 'like', "%{$title}%")
                    ->orWhere('title_bn', 'like', "%{$title}%");
            })->paginate(8)->appends([
                'title'=>$request->title
            ]);

-Thanks

0 likes
8 replies
Sinnbeck's avatar

Check the query being run using debugbar (post it here if in doubt)

Jarjis's avatar

@Sinnbeck

select * from `literacies` where (exists (select * from `categories` inner join `category_literacy` on `categories`.`id` = `category_literacy`.`category_id` where `literacies`.`id` = `category_literacy`.`literacy_id` and `categories`.`slug` = 'malware-2' and `categories`.`deleted_at` is null) and `title` like '%সনাক্ত%' or `title_bn` like '%সনাক্ত%' and `status` = 1) and `literacies`.`deleted_at` is null limit 8 offset 0
Sinnbeck's avatar
Sinnbeck
Best Answer
Level 102

@Jarjis As I expected. It is your orWhere() that isnt contained correctly

$literacies = Literacy::whereHas('categories',function ($query) use ($request,$slug){
                return $query->where('slug',$slug);
            })->when($request->title, function ($query,$title){
                $query->where(function($q) use($title) { //this will wrap these two in ()
                    $q->where('title', 'like', "%{$title}%")
                    ->orWhere('title_bn', 'like', "%{$title}%");

                   });
            })->paginate(8)->appends([
                'title'=>$request->title
            ]);
1 like

Please or to participate in this conversation.