将 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) < NOW()'))
以上是关于将 MariaDB 语句转换为 Laravel4 Eloquent-Query的主要内容,如果未能解决你的问题,请参考以下文章
mariadb/mysql:如何将 BLOB 的/UNPACK 部分转换为整数或双精度等
如何在 Xampp 上使用 MariaDB 将 XML 文件转换为行和列?
如何将带有 AES_ENCRYPT 的 mariadb ddl 转换为 jooq?