2016-01-15 31 views
3

我想查詢在2016-01-10創建的用戶。因此,在Laravel 5.1中的代碼是這樣的(created_at是時間戳):其中Laravel在Carbon中效果不佳

$day1 = new Carbon(); 
$day1->year = 2016; 
$day1->month = 1; 
$day1->day = 10; 

$day2 = new Carbon(); 
$day2->year = 2016; 
$day2->month = 1; 
$day2->day = 11; 

User::whereBetween('created_at', [$day1->startOfDay(), $day2->startOfDay()])->get(); 

上述代碼正常工作。 但這種正常的方式,沒有:

User::whereBetween('created_at', [$day1->startOfDay(), $day1->endOfDay()])->get(); 

我不認爲是有區別的。

回答

1

你不需要爲這個之間:

$myDate = new Carbon('2016-01-10'); 
User::whereDate('created_at', '=', $myDate->format('Y-m-d'))->get(); 
+0

感謝您的答覆。但是按照你的代碼,我得到這個:「缺少參數3爲Illuminate \ Database \ Query \ Builder :: whereDate()」 –

+1

它應該是'whereDate('created_at','=',$ myDate)',第二個參數必須是運算符,這是'='。 – Bogdan

+0

編輯回答;-) – schellingerht

0

您可以使用像他

\Illuminate\Database\Query\Builder Line 902 

User::whereDate('created_at', '=', new Carbon('2016-01-10'))->get(); 

消除積炭

User::where(DB::raw('DATE(created_at)'), '=', '2016-01-10')->get(); 
OR 
$d = new Carbon('2016-01-10'); 
User::whereRaw('DATE(created_at) = ?', [$d])->get(); 
+0

感謝您的回覆。我想用碳。但是用你的代碼,什麼都不匹配,即使我在那天有近50條記錄。與我的第一個代碼,它的工作原理,另一個不會。 –

+1

如果列的類型爲DATETIME,則使用'where'的日期等於Carbon實例的第一個條件將不起作用。第二種方法有一個輔助方法'whereDate',它可以做同樣的事情,但是避免在他的答案中使用'DB :: raw'作爲@Schellingerht。 – Bogdan

+0

是的。該列是時間戳,所以它不適用於第一種方式。 –