I'm making a products search by filters:
My code:
->where(function($query) use($filter) { if(!empty($filter)){ foreach ($filter as $key => $value) { $f = explode(",", $value); $query-> whereIn('products.value', $f); } } })
Query:
and (products.value in (Bomann, PHILIPS) and products.value in (red,white))
But I need:
and (products.value in (Bomann, PHILIPS) OR products.value in (red,white))
Is there something similar in Laravel:
orWhereIn
Laravel provide wherein() to use sql wherein query. in wherein() we just need to pass two argument one is column name and another if array of ids or anything that you want. You can see bellow syntax on wherein query in laravel: whereIn(Coulumn_name, Array);
Note: where will compare with just first value of array or just one single value. and whereIn will compare evey index of array.
Asking for help, clarification, or responding to other answers. Making statements based on opinion; back them up with references or personal experience.
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.
You could have searched just for whereIn
function in the core to see that. Here you are. This must answer all your questions
/** * Add a "where in" clause to the query. * * @param string $column * @param mixed $values * @param string $boolean * @param bool $not * @return \Illuminate\Database\Query\Builder|static */ public function whereIn($column, $values, $boolean = 'and', $not = false) { $type = $not ? 'NotIn' : 'In'; // If the value of the where in clause is actually a Closure, we will assume that // the developer is using a full sub-select for this "in" statement, and will // execute those Closures, then we can re-construct the entire sub-selects. if ($values instanceof Closure) { return $this->whereInSub($column, $values, $boolean, $not); } $this->wheres[] = compact('type', 'column', 'values', 'boolean'); $this->bindings = array_merge($this->bindings, $values); return $this; }
Look that it has a third boolean param. Good luck.
You have a orWhereIn
function in Laravel. It takes the same parameters as the whereIn
function.
It's not in the documentation but you can find it in the laravel API. http://laravel.com/api/4.1/
That should give you this:
$query-> orWhereIn('products.value', $f);
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