【问题标题】:How can I run this SQL query in Laravel?如何在 Laravel 中运行这个 SQL 查询?
【发布时间】:2020-10-15 11:47:53
【问题描述】:

我尝试在 laravel 中以多种方式运行此 SQL 查询,但它显示错误。

SELECT * FROM reservas WHERE cliente_id = 2201 AND dia >= '2020-10-15' GROUP BY dia

我已尝试运行此查询,但出现违规错误

DB::select('SELECT * FROM reservas WHERE cliente_id = :id AND dia >= :date GROUP BY dia', ['id' => $id, 'date' => $date]);

我发的变量有数据,也就是错误不是来自空变量,远非如此,而是错误来自查询。 需要注意的是,此查询在 SQL 中确实有效。

【问题讨论】:

  • 你当前的尝试是一个原始的 SQL 查询,所以至少你应该使用selectRaw,而不是select
  • 用 select 代替 selectRaw Call to undefined method Illuminate\Database\MySqlConnection::selectRaw() 时显示以下错误@
  • 你为什么使用GROUP BY而不选择任何聚合?您当前的查询没有意义。

标签: mysql sql laravel


【解决方案1】:

您需要将查询写成 groupBy(DB::raw('dia'))

\DB::table('reservas')->where('cliente_id',$id)->where('dia',$date)->get()->groupBy('dia');

如果您的 groupBy 无法正常工作,您需要将 config/database.php 中的 false 更改为 Like strict => false

希望它的工作!

【讨论】:

    【解决方案2】:

    @Cristian 你需要在 DB::select

    中使用 DB::raw

    这样使用

    DB::select(DB::raw("SELECT * FROM reservas WHERE cliente_id = :id AND dia >= :date GROUP BY dia"), ['id' => $id, 'date' => $date]);
    

    如果您不想将严格类型设置为 false,则使用此选项。

    DB::table('reservas')->where('cliente_id',$id)->where('dia',$date)->get()->groupBy('dia');
    

    【讨论】:

    • 但是一般来说,原始查询是最好的选择吗?假设 fluent builder 支持参数,那么使用它不是更有意义吗?
    • GROUP BYSELECT * 通常是被禁止的。
    • 这是在 Laravel @TimBiegeleisen 中使用原始 sql 查询的唯一方法
    • 我收到以下错误SQLSTATE[42000]: Syntax error or access violation: 1055 'propuesta.reservas.id' isn't in GROUP BY (SQL: SELECT * FROM reservas WHERE cliente_id = :id AND dia >= :date GROUP BY dia)
    • @TimBiegeleisen 你是对的,但他提到了如何运行 sql 查询。
    猜你喜欢
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 2015-01-03
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多