Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel or where

Tags:

Currently I am working on a project in Laravel but I am stuck.I want to create a SQL statement like this:

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 that generates:

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

How can I get the correct "or" order?

like image 428
Matthijn Avatar asked Sep 06 '13 14:09

Matthijn


People also ask

What is the difference between Laravel find and where?

find returns an object instance of the model while where which uses the get method returns a collection. find returns null if no row has been returned while where which uses the get method always returns a collection which can be empty when no results have been returned from the database.

What is ADD or condition in Laravel?

Laravel multiple where conditions - [OR]: What if you want to use OR condition in your query? You will have to use orWhere() condition for addition query. Note: First query cannot start with orWhere(). It has to be regular where().

What is query Builder in Laravel?

Laravel's database query builder provides a convenient, fluent interface to creating and running database queries. It can be used to perform most database operations in your application and works perfectly with all of Laravel's supported database systems.


2 Answers

Check out the Logical Grouping section in the docs:

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

It explains how to group conditions in the WHERE clause.

It should be something like:

if(isset($_GET['search'])) {     $query->where(function($query){         $query->where('title', 'like', '%' . $_GET['search'] . '%')               ->orWhere('description', 'like', '%' . $_GET['search'] . '%');     }); } 
like image 52
dcro Avatar answered Oct 19 '22 22:10

dcro


You can use whereRaw

SPItem::whereRaw(" publisher_id=? AND feed_id=? AND (title LIKE '%?%' OR description LIKE '%?%')", array(?,?,?,?)) 
like image 31
srsajid Avatar answered Oct 19 '22 20:10

srsajid