【问题标题】:How to run raw query in Laravel如何在 Laravel 中运行原始查询
【发布时间】:2021-06-24 23:24:55
【问题描述】:

如何在 Laravel 中编写以下原始查询

 $result=  DB::select('SELECT a.awb_number,a.full_awb_number,a.service_type, b.city AS From_city, c.country_code AS From_country, b.city AS To_city, c.country_code AS To_country, datediff( max(s.created_at), min(s.created_at)) as Aging FROM customer_shippments a LEFT JOIN addresses b ON a.from_address = b.id LEFT JOIN addresses c ON a.to_address = c.id LEFT JOIN statuses s ON s.awb_number = a.awb_number WHERE a.full_awb_number IN ("LA172827289EE", "LA172828854EE", "LA172829894EE") GROUP BY s.awb_number');
   return $result;

在执行上述查询时,我收到以下错误

SQLSTATE[42000]: Syntax error or access violation: 1055 'track.a.awb_number' isn't in GROUP BY (SQL: SELECT a.awb_number,a.full_awb_number,a.service_type, b.city AS From_city, c.country_code AS From_country, b.city AS To_city, c.country_code AS To_country, datediff( max(s.created_at), min(s.created_at)) as Aging FROM customer_shippments a LEFT JOIN addresses b ON a.from_address = b.id LEFT JOIN addresses c ON a.to_address = c.id LEFT JOIN statuses s ON s.awb_number = a.awb_number WHERE a.full_awb_number IN ("LA172827289EE", "LA172828854EE", "LA172829894EE") GROUP BY s.awb_number)

【问题讨论】:

  • 你使用什么 DBMS?
  • MySQL 数据库管理

标签: php laravel phpmyadmin


【解决方案1】:

如果您有参数,可能会发生此错误 'strict' => true 在 config/database.php 中为您提供数据库连接。

您可以将此参数设置为 false,或更改您的查询,以便“select”中的所有字段都表示在“group by”中

【讨论】:

  • 我已将参数 'strict'=> 设置为 false 但不起作用
  • @user5370838,请检查一下,也许您的数据库设置有ONLY_FULL_GROUP_BY 参数。要检查这一点,请运行 SELECT @@sql_mode; 查询并检查结果是否为 ONLY_FULL_GROUP_BY。如果有,您可以使用 SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); 查询禁用此功能
  • @ Andrew Markhai 我用这个原始查询试过了,先生....tq 对你的支持非常有用 public static function getstatusData(){ return DB::connection('mysql')->select ('SELECT a.awb_number,a.full_awb_number,a.service_type, b.city AS From_city, b.city AS To_city, datediff( max(s.created_at), min(s.created_at)) 作为 Aging FROM customer_shippments a LEFT JOIN地址 b ON a.from_address = b.id WHERE a.full_awb_number IN ("LA172827289EE", "LA172828854EE", "LA172829894EE") GROUP BY s.awb_number'); }
【解决方案2】:

使用 DB::raw(),但在使用 DB::raw 之前尝试先清理数据以防止 SQL 注入

$result = DB::raw('select blablabla')->get();
return $result;

Laravel Query Docs

【讨论】:

    猜你喜欢
    • 2013-05-12
    • 2019-07-13
    • 2017-11-13
    • 2016-01-08
    • 2019-11-05
    • 2012-10-29
    • 1970-01-01
    • 2017-05-09
    相关资源
    最近更新 更多