获取这样的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循环后执行
答案 0 :(得分:1)
Laravel使用预准备语句,以便获取sql查询和参数,您不仅需要使用toSql()
方法,还需要使用getBindings()
,因此要获得完整查询,您可以使用例如:
$sql = str_replace(['%', '?'], ['%%', "'%s'"], $postcode_extract->toSql());
$fullSql = vsprintf($sql, $postcode_extract->getBindings());