Combining AND/OR eloquent query in Laravel Combining AND/OR eloquent query in Laravel laravel laravel

Combining AND/OR eloquent query in Laravel


You can nest where clauses : http://laravel.com/docs/database/fluent#nested-where

Model::where(function($query){    $query->where('a', 'like', 'keyword');    $query->or_where('b', 'like', 'keyword');})->where('c', '=', '1');

This should produce : SELECT * FROM models WHERE (a LIKE %keyword% OR b LIKE %keyword%) AND c = 1


For a more accurate answer to the example:

$val = '%keyword%';A_Table_Model::where(function($query) use ($val){    $query->where('a', 'like', $val);    $query->or_where('b', 'like', $val);})->where('c', '=', 1)->where('d', '=', 5)->get();

Note: This is Laravel 3 syntax, use camelCase orWhere() for Laravel 4


In Laravel 5.1+ this will also do the job and looks cleaner:

Model::where(function($query) {    $query->where('a', 'like', 'keyword');    $query->or_where('b', 'like', 'keyword');})->where('c', '=', '1')->get();