有没有办法翻译以下查询(只有WHERE IN子句)
SELECT * FROM table WHERE (first, second) IN ((1,2),(2,3))
到Laravel Eloquent语法?
我已经尝试将数组作为Table::whereIn()
的第一个参数传递,但是在该过程的某个地方(Illuminate \ Database \ Grammar:58),它会传递给不接受数组的strtolower()
。
有解决方法吗?也许涉及whereInExistingQuery
方法的东西?
如果没有,你知道如何实现这样的功能吗?
澄清:
前面提到的条款意味着(first = 1 AND second = 2) OR (first = 2 AND second = 3)
。当然,我可以在嵌套查询foreach
中完成所有对,但我希望有更优雅/直接的解决方案。
更新: 因为此查询在例如中无效。 MSSQL,Oracle或sqlite,唯一的解决方案是过滤列和值:
$columns = ['first', 'second'];
$values = [
[
'first' => 1,
'second' => 2
],
[
'first' => 2,
'second' => 3,
]
];
Table::where(function($query) use ($columns, $values) {
foreach ($values as $valueArray) {
$query->orWhere(function($innerQuery) use ($columns, $valueArray) {
foreach ($columns as $column) {
$innerQuery->where($column, '=', $valueArray[$column]);
}
});
}
});