将 MariaDB 语句转换为 Laravel4 Eloquent-Query

Posted

技术标签:

【中文标题】将 MariaDB 语句转换为 Laravel4 Eloquent-Query【英文标题】:Converting a MariaDB-Statement into a Laravel4 Eloquent-Query 【发布时间】:2015-02-24 00:09:39 【问题描述】:

我想将 MariaDB 语句转换为 Eloquent 查询。 SQL 语句运行良好,但遗憾的是 Eloquent 部分不是。

SQL 语句 (MariaDB)

选择 matchday_id, MAX(ADDDATE(date, INTERVAL 105 MINUTE)) 作为 matchday_end FROM 匹配 GROUP BY matchday_id HAVING MAX(date)

雄辩的查询(Laravel 4)

$ended_matchdays = DB::table('matches') ->selectRaw('matchday_id, MAX(ADDDATE(date, INTERVAL 105 MINUTE)) as matchday_end') ->groupBy('matchday_id') ->拥有('MAX(日期)', ' ->get();

错误信息 (Laravel 4)

SQLSTATE[42S22]: 未找到列: 1054 未知列 'MAX(date)' in 'having clause' (SQL: select matchday_id, MAX(ADDDATE(date, INTERVAL 105 MINUTE)) as end from matches group由matchday_id 拥有MAX(date)

我真的不知道,为什么这不起作用,也许 - 有时 - 一个我看不到的微不足道的错误.. 希望你们能帮我解决这个问题!

【问题讨论】:

【参考方案1】:

我现在可以使用它了。 这是(对我而言)工作代码:

->having(DB::raw('MAX(date)'), '

我试图只包装 MAX(date) 部分,以及 DB::raw() 中的整行,但两者都不起作用。

现在我使用 Carbon-Class,它的工作原理就像一个魅力 =)

谢谢!

【讨论】:

【参考方案2】:
->having('MAX(date)', '<', 'NOW()')

需要成为:

->having(DB::raw('MAX(date)'), '<', 'NOW()')

【讨论】:

我认为您也需要将NOW() 包装在DB::raw() 中。或者只是整个表达式having(DB::raw('MAX(date) &lt; NOW()'))

以上是关于将 MariaDB 语句转换为 Laravel4 Eloquent-Query的主要内容,如果未能解决你的问题,请参考以下文章

mariadb/mysql:如何将 BLOB 的/UNPACK 部分转换为整数或双精度等

如何在 Xampp 上使用 MariaDB 将 XML 文件转换为行和列?

如何将带有 AES_ENCRYPT 的 mariadb ddl 转换为 jooq?

如何将控制器中的 Laravel 4.2 beforeFilter 转换为 Laravel 5.2 中的自定义中间件

将 MSSQL 准备好的语句迁移到 MariaDB

管理 MariaDB 用户账户