或者在哪里或者在哪里使用Laravel语法和原始查询

时间:2015-04-16 16:33:54

标签: php sql laravel laravel-5 query-builder

获取这样的SQL语句;

SELECT postcode FROM Payment WHERE 
  countries IN ('E92000001', 'L93000001') AND 
  counties IN ('95', 'E10000002') AND 
  gors in ('A', 'B');

我的代码目前;

$postcode_extract = PostcodeExtract::all();

foreach ($input as $column => $values) {
            $postcode_extract->whereIn($column, $values);
    }

我需要将这些AND切换为OR。我认为我可能拥有它;

foreach ($input as $column => $values) {
    $postcode_extract->orWhere(function ($query) use ($column, $values) {
                                $query->whereIn($column, $values);
                                });
        }

我确实得到了结果..虽然没有看到原始查询但很难说。我使用了toSql(),这就是结果;

select * from `201502_postcode` where (`country` in (?, ?)) or (`county` in (?, ?)) or (`gor` in (?, ?))

为什么选择??为什么不是真实数据,或者不是toSql的工作原理?

- 更新 -

以下是使用toSql;

的代码
$sql = $postcode_extract->toSql();

print_r($sql);

我在foreach循环后执行

1 个答案:

答案 0 :(得分:1)

Laravel使用预准备语句,以便获取sql查询和参数,您不仅需要使用toSql()方法,还需要使用getBindings(),因此要获得完整查询,您可以使用例如:

$sql = str_replace(['%', '?'], ['%%', "'%s'"], $postcode_extract->toSql());
$fullSql = vsprintf($sql, $postcode_extract->getBindings());