2016-07-12 16 views
0

所以我試圖從我的後端(這是用Laravel寫的PHP)到我的SQL數據庫建立一個查詢。我在我的數據庫中有一個表格,標題爲「created_at」,帶有'timestamp'類型的值。我想要做的是,當我發送一個查詢到我的數據庫時,只選擇我的表的行(或實例,我猜)是從當前日期創建的30天或更少。我嘗試過使用「where」關鍵字進行實驗,但是無法按照我的需求進行操作。使用Laravel過濾SQL數據庫查詢的時間戳,後端在PHP中使用Laravel

當我瀏覽數據庫中的表格時,日期的格式爲「YYYY-MM-DD hh:mm:ss」,但我不確定如何比較它們,我不知道如何在進行查詢時轉換它們。我查看了Laravel中的whereBetween()方法,但我沒有得到那個工作,因爲我不知道如何比較它們。

此刻我的查詢看起來是這樣的:

$topUser = DB::table('statistics') 
      ->join('users', 'statistics.user_id', '=', 'users.id', 'inner') 
      ->select('fname', 'user_id', DB::raw('sum(price) as total_collection')) 
      ->groupBy('user_id') 
      ->orderBy('total_collection','desc') 
      ->get(); 

我想要做什麼,在僞代碼,是沿着線的東西;

->where 'created_at' <= 30 days ago 

在此先感謝!

+0

'WHERE( 「created_at」,利用MySQL的日期函數 「<=」,DB ::原始( 「NOW() - 間隔30天」 ))'? – apokryfos

回答

1

基本上就是這麼簡單。

->whereDate('created_at', '<=', \Carbon\Carbon::now()->subDays(30)); 
+0

還沒有使用碳,這是一些需要下載和不需要的插件,對不對?非常感謝答案! –

+1

@NyfikenGul Carbon默認帶有Laravel。 Laravel在內部使用它來處理大量日期邏輯。 – ceejayoz

+0

啊,我明白了!這太好了,會考慮它然後 –

1

您可以通過使用DB::raw

->where('created_at', '<=', DB::raw("DATE_SUB(CURDATE(),INTERVAL 30 DAY)") 
+0

儘可能避免'DB :: raw'。它傾向於將代碼鎖定到單個數據庫引擎。 – ceejayoz

+0

將盡力!謝謝你! –

+0

@ceejayoz你可以使用'DB :: raw'並且同時是SQL兼容的(這個查詢不是)。 – apokryfos

相關問題