有没有办法翻译以下查询(只有WHERE IN子句)
SELECT * FROM table WHERE (first, second) IN ((1,2),(2,3))
到Laravel Eloquent语法?
我已经尝试将数组作为 Table::whereIn()
的第一个参数传递,但是在该过程的某个地方(Illuminate \ Database \ Grammar:58),它被传递给 strtolower()
,它不接受数组 .
有解决方法吗?也许涉及 whereInExistingQuery
方法的东西?
如果没有,你知道如何实现这样的功能吗?
CLARIFICATION :之前提到的条款意味着 (first = 1 AND second = 2) OR (first = 2 AND second = 3)
. 当然,我可以在所有对的嵌套查询中执行此操作,但我希望有更优雅/直接的解决方案 .
UPDATE :因为此查询在例如中无效 . 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]);
}
});
}
});