【问题标题】:orWhere to orWhereIn with Laravel syntax and raw queriesorWhere to orWhereIn 使用 Laravel 语法和原始查询
【发布时间】:2015-06-23 05:22:12
【问题描述】:

要得到这样的 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 (?, ?))

为什么是?s?为什么不是真实数据,或者toSql 不是这样工作的?

-- 更新--

这是我使用toSql的代码;

$sql = $postcode_extract->toSql();

print_r($sql);

我在foreach循环之后做

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-01
      • 2015-02-22
      • 2018-01-30
      • 2017-06-29
      • 2018-01-27
      • 1970-01-01
      • 2021-02-11
      • 2023-04-05
      相关资源
      最近更新 更多