Php Laravel:如何在where子句中混合“and”和“and”或“or”条件?
我已经搜索并找到了类似的帖子,但没有一篇与我的案例相同。虽然我的案例在数据库查询的where子句中非常常见,但Laravel文档似乎没有显示像我这样的案例 在我的例子中,where子句如下所示,我无法让它与其他帖子中建议的where和where方法和技巧一起使用。任何信息谢谢。谢谢Php Laravel:如何在where子句中混合“and”和“and”或“or”条件?,php,mysql,laravel,Php,Mysql,Laravel,我已经搜索并找到了类似的帖子,但没有一篇与我的案例相同。虽然我的案例在数据库查询的where子句中非常常见,但Laravel文档似乎没有显示像我这样的案例 在我的例子中,where子句如下所示,我无法让它与其他帖子中建议的where和where方法和技巧一起使用。任何信息谢谢。谢谢 where a = 1 and b = 2 and (c = 3 or c = 4) and (d = 5 or d = 6) 另一个复杂程度是,我可以将所有“and”条件组合到一个数组中,并将其输入到一个wher
where a = 1 and b = 2 and (c = 3 or c = 4) and (d = 5 or d = 6)
另一个复杂程度是,我可以将所有“and”条件组合到一个数组中,并将其输入到一个where方法中,但我必须将“or”条件分组到单独的数组中,并在代码中动态收集多少组,如下面所示
$and = [['a', '=', 1], ['b', '=', 2], ...];
if($cond1) $or['or1'] = [['c', '=', 3], ['c', '=', 4], ...];
if($cond2) $or['or2'] = [['d', '=', 5], ['d', '=', 6], ...];
if($cond3) $or['or3'] = [['e', '=', 7], ['e', '=', 8], ...];
...
PS:我要感谢所有回复帖子或评论的人。我认真考虑了所有的建议,并尝试了一些适用于我的案例的建议,但不幸的是,这些建议都不起作用。所以我的解决方案就是编译一个原始where子句,如我上面给出的示例所示,并使用WHERRAW方法。这件事做起来很简单,而且做得很好。你可以这样做
Model::where('a', '1')
->where('b', '2')
->where(function ($q) {
$q->where('c', '3')->orWhere('c', '4');
})
->where(function ($q) {
$q->where('d', '5')->orWhere('d', '5');
})->get();
你可以这样做
Model::where('a', '1')
->where('b', '2')
->where(function ($q) {
$q->where('c', '3')->orWhere('c', '4');
})
->where(function ($q) {
$q->where('d', '5')->orWhere('d', '5');
})->get();
像这样的事情应该可以做到:
Model::where([
['a', '=', 1],
['b', '=', 2],
[['c', '=', 3], 'OR', ['c', '=', 4]],
[['d', '=', 5], 'OR', ['d', '=', 6]]
]);
像这样的事情应该可以做到:
Model::where([
['a', '=', 1],
['b', '=', 2],
[['c', '=', 3], 'OR', ['c', '=', 4]],
[['d', '=', 5], 'OR', ['d', '=', 6]]
]);
如果我有你的问题,那么这封信是给你的:
$result = DB::table('table')
->where('a', 1)
->where('b', 2)
->where(function($query) {
$query->where('c', 3)
->orWhere('c', 4)
})
->where(function($query) {
$query->where('d', 5)
->orWhere('d', 6)
->get();
如果我有你的问题,那么这封信是给你的:
$result = DB::table('table')
->where('a', 1)
->where('b', 2)
->where(function($query) {
$query->where('c', 3)
->orWhere('c', 4)
})
->where(function($query) {
$query->where('d', 5)
->orWhere('d', 6)
->get();
使用其中的子查询。我还没检查过,但我想这会有用的
Model::where('a', '1')
->where('b', '2')
->where(function ($q) {
$q->whereIn('c', ['3', '4']);
})
->where(function ($q) {
$q->whereIn('d', ['5', '6']);
})->get();
使用其中的子查询。我还没检查过,但我想这会有用的
Model::where('a', '1')
->where('b', '2')
->where(function ($q) {
$q->whereIn('c', ['3', '4']);
})
->where(function ($q) {
$q->whereIn('d', ['5', '6']);
})->get();
因为你改进了你的问题。以下是您如何实现它的方法 我还没有测试过。像这样的怎么样
$ands = [['a', '=', 1], ['b', '=', 2], ...];
$query = Model::query();
foreach($and as $and) {
$query = $query->where($and);
}
if($cond1) $ors['c'] = [3, 4, ...];
if($cond2) $ors['d'] = [5, 6, ...];
if($cond3) $ors['e'] = [7, 8, ...];
...
foreach($ors as $key => $or) {
$query = $query->where(function($q) use ($key, $or) {
$q->whereIn($key,$or);
});
}
$query->get();
因为你改进了你的问题。以下是您如何实现它的方法 我还没有测试过。像这样的怎么样
$ands = [['a', '=', 1], ['b', '=', 2], ...];
$query = Model::query();
foreach($and as $and) {
$query = $query->where($and);
}
if($cond1) $ors['c'] = [3, 4, ...];
if($cond2) $ors['d'] = [5, 6, ...];
if($cond3) $ors['e'] = [7, 8, ...];
...
foreach($ors as $key => $or) {
$query = $query->where(function($q) use ($key, $or) {
$q->whereIn($key,$or);
});
}
$query->get();
谢谢这将是最直接的解决方案,但不幸的是,它似乎不适合我。不确定它是否是更新版本的laravel中的功能。我的版本是5.7.19。谢谢。这将是最直接的解决方案,但不幸的是,它似乎不适合我。不确定它是否是更新版本的laravel中的功能。我的版本是5.7.19。谢谢。正如我在我的帖子中补充的,一组“或”条件的数量不是固定的,但这应该给我一个解决方案。谢谢。正如我在我的帖子中补充的,一组“或”条件的数量不是固定的,但这应该给我一个解决方案。谢谢。这应该给我一个变通解决方案,因为“或”条件组的数量不是固定的,谢谢。这应该给了我一个解决方案,因为“或”条件组的数量不是固定的,错误显示解析后的查询,如0=a和1==以及2=1和c中的c,=您现在可以检查它了吗。我带来了一些更改。错误显示解析后的查询,如0=a和1==以及2=1和c中的c,=您现在可以检查它了吗。我带来了一些变化。