我正在使用Laravel's query builder和SQLite数据库。当然,SQLite不存在datetime类型,我使用strftime将我的时间戳转换为月份或年份值。
以下查询有效(直接使用SQLite Manager进行测试):
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中没有强制转换,解释取决于上下文。有没有办法影响解释?
答案 0 :(得分:1)
类型转换为absolutely supported in PHP。
但是,快速而肮脏的方法就是添加一个字符串。
$articles = DB::table('articles')
->where(DB::raw('strftime("%Y", articles.date, "unixepoch", "localtime") '), "" + $annee)
->orderBy('date', 'DESC')->toSql();
答案 1 :(得分:0)
PHP支持类型转换,但仅支持string,array,float,int和object。
DB::table('articles')
->where( 'myColumn', (string) $annee)
->orderBy('date', 'DESC')->toSql();
但是,快速而肮脏的方法就是添加一个字符串。
DB::table('articles')
->where('myColumn', "" + $annee)
->orderBy('date', 'DESC')->toSql();