2013-12-13 75 views
0

全局環境

我正在使用Laravel's query builder和SQLite數據庫。當然,datetime類型不存在與SQLite和我使用strftime將我的時間戳轉換爲月或年的值。如何強制PHP變量爲字符串?

使用SQLite的微妙之處我才發現

下面的查詢工作(使用SQLite的經理直接測試):

SELECT * FROM "articles" 
WHERE strftime("%Y", mydate, "unixepoch", "localtime") = "2013" 

這一個不工作:

SELECT * FROM "articles" 
WHERE strftime("%Y", mydate, "unixepoch", "localtime") = 2013 

由於據我所知,比較必須用字符串來完成。

問題

如何用Laravel的查詢生成器來解決它?

我讀過的數據庫的具體功能,我必須使用DB::raw工具。

$articles = DB::table('articles') 
->where(DB::raw('strftime("%Y", articles.date, "unixepoch", "localtime") '), $annee) 
->orderBy('date', 'DESC')->toSql(); 

但問題是,這是構建查詢時解釋像數字的參數$annee

我知道在PHP中沒有強制轉換,而解釋取決於上下文。有沒有辦法影響解釋?

+2

我對Laravel並不熟悉,但是您是否已嘗試'(字符串)$ annee'在您現在具有'$ annee'的位置? (是的,在PHP中有鑄造,但只對'string','array','float','int'和'object') –

+0

@PetervanderWal'(字符串)$ annee'正常工作,謝謝!當我閱讀PHP手冊時,我想我會誤解第一行:'PHP不支持顯式類型定義'。 – Fractaliste

+0

該行意味着變量本身沒有被鍵入,就像在Java,C#和其他語言中定義特定類型的變量('string myVar')一樣。在PHP中,$ myVar可以是第一行的int,並在下一行保存一個字符串。然而,存儲在一個變量中的*值*是一個特定的類型,你可以改變這種類型(在PHP中稱爲「Type Juggling」)。 –

回答

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(); 
1

類型鑄造是absolutely supported in PHP

但一個快速和骯髒的方式來做到這一點只是簡單地添加一個字符串。

$articles = DB::table('articles') 
->where(DB::raw('strftime("%Y", articles.date, "unixepoch", "localtime") '), "" + $annee) 
->orderBy('date', 'DESC')->toSql(); 
相關問題