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?
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.
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().
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.
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'] . '%'); }); }
You can use whereRaw
SPItem::whereRaw(" publisher_id=? AND feed_id=? AND (title LIKE '%?%' OR description LIKE '%?%')", array(?,?,?,?))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With