Laravel MS SQL DB::RAW 查询 returns "Invalid column name"
Laravel MS SQL DB::RAW Query returns "Invalid column name"
我在 Laravel 应用程序中使用 SQL 服务器。我需要 group/sum 一个 table 作为 month/year。我的查询如下所示:
$positions = BelegPos::select(
DB::raw("YEAR(Datum) as year"),
DB::raw("MONTH(Datum) as month"),
DB::raw("SUM(Menge) as stunden")
)->groupBy("year", "month")
->get();
我会收到以下错误消息:
SQLSTATE[42S22]: [Microsoft][ODBC Driver 17 for SQL Server][SQL
Server]Invalid column name 'year'.
我不知道出了什么问题,因为我构建查询的方式在 MySQL 服务器上运行良好。
感谢任何正确方向的提示。
更新
我进行了更多研究并阅读了一些指出的内容,即 Select 语句在 GROUP BY 部分中不可用,您必须在此处添加相同的查询。所以我的查询现在看起来像这样:
$positions = selectlineBelegPos::select(
DB::raw("YEAR(Datum) as the_year"),
DB::raw("MONTH(Datum) as the_month"),
DB::raw("SUM(Menge) as stunden")
)
->groupBy(DB::raw("YEAR(Datum) as the_year"),DB::raw("MONTH(Datum) as the_month"))
->get();
仍然不是解决方案,但错误消息已更改为:
SQLSTATE[42000]: [Microsoft][ODBC Driver 17 for SQL Server][SQL
Server]Incorrect syntax near the keyword (SQL: select
YEAR(Datum) as the_year, MONTH(Datum) as the_month, SUM(Menge) as
stunden from [BELEGP]
所以我认为只有一件小事不对,但不知道是什么。
有什么想法吗?
解决方案
刚刚找到解决方案:
$positions = selectlineBelegPos::select(
DB::raw("YEAR(Datum) AS year"),
DB::raw("MONTH(Datum) AS month"),
DB::raw("SUM(Menge) AS stunden")
)
->groupBy(DB::raw("YEAR([Datum])"),DB::raw("MONTH([Datum])"))
->get();
确实不是 GROUPBY 子句中的动态值名称(年和月)不可用,而是您必须再次调用 DB::raw 但现在不会再次生成关键字。
感谢大家的支持!
我在 Laravel 应用程序中使用 SQL 服务器。我需要 group/sum 一个 table 作为 month/year。我的查询如下所示:
$positions = BelegPos::select(
DB::raw("YEAR(Datum) as year"),
DB::raw("MONTH(Datum) as month"),
DB::raw("SUM(Menge) as stunden")
)->groupBy("year", "month")
->get();
我会收到以下错误消息:
SQLSTATE[42S22]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Invalid column name 'year'.
我不知道出了什么问题,因为我构建查询的方式在 MySQL 服务器上运行良好。
感谢任何正确方向的提示。
更新
我进行了更多研究并阅读了一些指出的内容,即 Select 语句在 GROUP BY 部分中不可用,您必须在此处添加相同的查询。所以我的查询现在看起来像这样:
$positions = selectlineBelegPos::select(
DB::raw("YEAR(Datum) as the_year"),
DB::raw("MONTH(Datum) as the_month"),
DB::raw("SUM(Menge) as stunden")
)
->groupBy(DB::raw("YEAR(Datum) as the_year"),DB::raw("MONTH(Datum) as the_month"))
->get();
仍然不是解决方案,但错误消息已更改为:
SQLSTATE[42000]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Incorrect syntax near the keyword (SQL: select YEAR(Datum) as the_year, MONTH(Datum) as the_month, SUM(Menge) as stunden from [BELEGP]
所以我认为只有一件小事不对,但不知道是什么。
有什么想法吗?
解决方案
刚刚找到解决方案:
$positions = selectlineBelegPos::select(
DB::raw("YEAR(Datum) AS year"),
DB::raw("MONTH(Datum) AS month"),
DB::raw("SUM(Menge) AS stunden")
)
->groupBy(DB::raw("YEAR([Datum])"),DB::raw("MONTH([Datum])"))
->get();
确实不是 GROUPBY 子句中的动态值名称(年和月)不可用,而是您必须再次调用 DB::raw 但现在不会再次生成关键字。
感谢大家的支持!