在Laravel中组合AND / OR eloquent查询

时间:2013-03-27 06:46:58

标签: php laravel

如何使用Eloquent编写以下或类似的查询?

SELECT * FROM a_table WHERE (a LIKE %keyword% OR b LIKE %keyword%) AND c = 1 AND d = 5

我无法通过链接到哪里和我想要的方式组合AND / OR or_where函数。

4 个答案:

答案 0 :(得分:37)

您可以嵌套where子句: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');

这应该产生:SELECT * FROM models WHERE (a LIKE %keyword% OR b LIKE %keyword%) AND c = 1

答案 1 :(得分:7)

有关示例的更准确答案:

$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();

注意:这是Laravel 3语法,对Laravel 4使用camelCase或Where()

答案 2 :(得分:2)

在Laravel 5.1+中,这也可以完成工作,看起来更干净:

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

答案 3 :(得分:-3)

您可以在第一个DB::raw()中使用where()来添加/或声明。