全局環境
我正在使用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中沒有強制轉換,而解釋取決於上下文。有沒有辦法影響解釋?
我對Laravel並不熟悉,但是您是否已嘗試'(字符串)$ annee'在您現在具有'$ annee'的位置? (是的,在PHP中有鑄造,但只對'string','array','float','int'和'object') –
@PetervanderWal'(字符串)$ annee'正常工作,謝謝!當我閱讀PHP手冊時,我想我會誤解第一行:'PHP不支持顯式類型定義'。 – Fractaliste
該行意味着變量本身沒有被鍵入,就像在Java,C#和其他語言中定義特定類型的變量('string myVar')一樣。在PHP中,$ myVar可以是第一行的int,並在下一行保存一個字符串。然而,存儲在一個變量中的*值*是一個特定的類型,你可以改變這種類型(在PHP中稱爲「Type Juggling」)。 –