Laravel Eloquent 使用 WHERE 一组条件或 OR 另一组条件以及一些常见条件进行查询?
Laravel Eloquent Query Using WHERE a set of conditions or OR another set of conditions along with some common conditions?
我必须在我的 Laravel 项目中执行 sql 操作。
除了提到的条件外,我还有一些常见的条件。我知道如何用原始 mysql 编写它。
所以,比如说
我需要的是
如何使用 laravel 查询格式说 WHERE Condition X AND Condition Y AND ( (a = 1 and b =1 ) OR (c = 1 AND d = 1) )
?
考虑以下语法:
DB::table('yourTable')
->where('x', '=', '1')
->where('y', '=', '1')
->where(function($q1)
{
$q1->where(function($q2)
{
$q2->where('a', '=', '1')
->where('b', '=', '1');
})
->orWhere(function($q2)
{
$q2->where('c', '=', '1')
->where('d', '=', '1');
});
});
如果您更喜欢更易读的语法 where
将接受数组作为参数
DB::table('yourTable')
->where('x','=',1)
->where('y','=',1)
->where(function($queryBuilder){
$queryBuilder->where([
['a','=',1],
['b','=',1],
])
->orWhere([
['c','=',1],
['d','=',1],
]);
});
$query = DB::table(...)
->where(function ($query) {
$query->where('a', 1)->where('b', 1);
})->orWhere(function ($query) {
$query->where('c', 1)->where('d, 1);
});
Laravel 6.x Docs - Query Builder - Where Clauses - Parameter Grouping
您需要使用闭包将它们单独分组。 orWhere()
用于外部查询,where()
用于内部查询。
$a = 1;
$b = 1;
$c = 1;
$d = 1;
Model::where(function($query) use ($a, $b) {
$query->where("a", $a)
->where("b", $b);
})
->orWhere(function($query) use ($c, $d) {
$query->where("c", $c)
->where("d", $d);
});
如果您没有模型,可以将Model::
替换为DB::table("myTable")
。
您可以使用 toSql()
查看最终查询。
我必须在我的 Laravel 项目中执行 sql 操作。
除了提到的条件外,我还有一些常见的条件。我知道如何用原始 mysql 编写它。
所以,比如说 我需要的是
如何使用 laravel 查询格式说 WHERE Condition X AND Condition Y AND ( (a = 1 and b =1 ) OR (c = 1 AND d = 1) )
?
考虑以下语法:
DB::table('yourTable')
->where('x', '=', '1')
->where('y', '=', '1')
->where(function($q1)
{
$q1->where(function($q2)
{
$q2->where('a', '=', '1')
->where('b', '=', '1');
})
->orWhere(function($q2)
{
$q2->where('c', '=', '1')
->where('d', '=', '1');
});
});
如果您更喜欢更易读的语法 where
将接受数组作为参数
DB::table('yourTable')
->where('x','=',1)
->where('y','=',1)
->where(function($queryBuilder){
$queryBuilder->where([
['a','=',1],
['b','=',1],
])
->orWhere([
['c','=',1],
['d','=',1],
]);
});
$query = DB::table(...)
->where(function ($query) {
$query->where('a', 1)->where('b', 1);
})->orWhere(function ($query) {
$query->where('c', 1)->where('d, 1);
});
Laravel 6.x Docs - Query Builder - Where Clauses - Parameter Grouping
您需要使用闭包将它们单独分组。 orWhere()
用于外部查询,where()
用于内部查询。
$a = 1;
$b = 1;
$c = 1;
$d = 1;
Model::where(function($query) use ($a, $b) {
$query->where("a", $a)
->where("b", $b);
})
->orWhere(function($query) use ($c, $d) {
$query->where("c", $c)
->where("d", $d);
});
如果您没有模型,可以将Model::
替换为DB::table("myTable")
。
您可以使用 toSql()
查看最终查询。