【发布时间】:2013-12-13 12:05:50
【问题描述】:
全局上下文
我正在使用Laravel's query builder 和 SQLite 数据库。当然,SQLite 不存在 datetime 类型,我使用 strftime 将时间戳转换为月份或年份值。
我刚刚发现的 SQlite 的微妙之处
以下查询有效(直接使用 SQLite 管理器测试):
SELECT * FROM "articles"
WHERE strftime("%Y", mydate, "unixepoch", "localtime") = "2013"
这个不行:
SELECT * FROM "articles"
WHERE strftime("%Y", mydate, "unixepoch", "localtime") = 2013
据我了解,比较必须用字符串来完成。
问题
如何使用 Laravel 的查询生成器解决它?
我已经读过,对于 DB 的特定功能,我必须使用 DB::raw 工具。
$articles = DB::table('articles')
->where(DB::raw('strftime("%Y", articles.date, "unixepoch", "localtime") '), $annee)
->orderBy('date', 'DESC')->toSql();
但问题是参数$annee 在构建查询时被解释为数字。
我知道 PHP 中没有强制转换,并且解释取决于上下文。有没有办法影响解释?
【问题讨论】:
-
我对 Laravel 不熟悉,但是你有没有尝试过
(string) $annee在你现在的位置$annee? (是的,PHP 中有强制转换,但仅限于string、array、float、int和object) -
@PetervanderWal
(string) $annee工作正常,谢谢!当我阅读 PHP 手册时,我想我会误解第一行:PHP does not support explicit type definition. -
该行意味着变量本身没有被键入,就像在 Java、C# 和其他语言中定义特定类型的变量 (
string myVar) 一样。在 PHP 中,$myVar可以是第一行的 int,并在下一行保存一个字符串。但是,存储在变量中的 值 属于特定类型,您可以更改该类型(在 PHP 中称为Type Juggling)。
标签: php jquery sqlite laravel query-builder