Laravel Eloquent - 多个WHERE IN子句

时间:2016-03-23 10:48:23

标签: php sql laravel eloquent

有没有办法翻译以下查询(只有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]);
            }
        });
    }
});

0 个答案:

没有答案