PHP系列 | TP6使用表達式設置數據 Db::raw('end_time')

模型或者Db無數據

使用以下語句查詢記錄

$liveList = Db::table('sys_live')
    ->field('id,begin_time,end_time,title')
    ->where('end_time','<>',0)
    ->where('begin_time','>','end_time')
    ->count();

查詢結果爲:0

通過fetchSql打印SQL語句

$liveList = Db::table('sys_live')
    ->field('id,begin_time,end_time,title')
    ->where('end_time','<>',0)
    ->where('begin_time','>','end_time')
    ->fetchSql()
    ->count();

打印SQL如下

SELECT COUNT(*) AS think_count FROM `sys_live` WHERE  `end_time` <> 0  AND `begin_time` > end_time

注意:細心的朋友會發現開始時間是:`begin_time`(有雙引號),而結束時間是:end_time(無雙引號)

直接通過MySQL命令行,執行以上SQL語句是沒問題的

mysql> SELECT COUNT(*) AS think_count FROM `sys_live` WHERE  `end_time` <> 0  AND `begin_time` > end_time;
+-------------+
| think_count |
+-------------+
|        100  |
+-------------+
1 row in set (0.14 sec)

解決辦法

查詢條件使用表達式設置數據 Db::raw('end_time'),最後改寫爲以下查詢

$liveList = Db::table('sys_live')
    ->field('id,begin_time,end_time,title')
    ->where('end_time','<>',0)
    ->where('begin_time','>',Db::raw('end_time'))
    ->count();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章