Laravel or where

I am currently working on a project in Laravel, but I'm stuck. I want to create an SQL statement as follows:

SELECT * FROM SPITems WHERE publisher_id=? AND feed_id=? AND (title LIKE '%?%' OR description LIKE '%?%') 

Now I have this code:

 $query = SPItem::orderBy('title'); if(isset($_GET['publisherID']) && is_numeric($_GET['publisherID'])) { $query = $query->where('publisher_id', $_GET['publisherID']); } if(isset($_GET['productFeedID']) && is_numeric($_GET['productFeedID'])) { $query = $query->where('program_id', $_GET['feedID']); } if(isset($_GET['search'])) { $query = $query->orWhere('title', 'like', '%' . $_GET['search'] . '%'); $query = $query->where('description', 'like', '%' . $_GET['search'] . '%'); } 

But this begets:

 SELECT * FROM SPITems WHERE (publisher_id=? AND feed_id=?) OR (title LIKE '%?%') AND description LIKE '%?%' 

How can I get the correct "or" order?

+4
source share
2 answers

Check the “Grouping options” section in the docs:

https://laravel.com/docs/master/queries#parameter-grouping

It explains how to group conditions in a WHERE clause.

It should be something like:

 if(isset($_GET['search'])) { $query = $query->where(function($query){ $query->where('title', 'like', '%' . $_GET['search'] . '%') ->orWhere('description', 'like', '%' . $_GET['search'] . '%'); }); } 
+14
source

You can use whereRaw

 SPItem::whereRaw(" publisher_id=? AND feed_id=? AND (title LIKE '%?%' OR description LIKE '%?%')", array(?,?,?,?)) 
-one
source

Source: https://habr.com/ru/post/1500943/


All Articles