如何强制PHP变量成为字符串?

时间:2013-12-13 12:05:50

标签: php jquery sqlite laravel query-builder

全球背景

我正在使用Laravel's query builder和SQLite数据库。当然,SQLite不存在datetime类型,我使用strftime将我的时间戳转换为月份或年份值。

SQlite的微妙之处我只是发现了

以下查询有效(直接使用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中没有强制转换,解释取决于上下文。有没有办法影响解释?

2 个答案:

答案 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();