2017-08-29 75 views
-1

我想使用數組更新我的數據,但是它的錯誤導致我在查找數據時使用「like」查詢。這是代碼。LARAVEL使用數組更新數據

$pin = 10590; 
$datetime = "2017-08-29 15:05:00"; 
$date = explode(' ', $datetime); 
Attendance::where('user_id', $pin)->where('datetime_in', 'like', '%' . $date[0] . '%')->update([ 
    'datetime_out' => $datetime, 
    'updated_at' => date('Y-m-d') 
]); 

任何解決方案??謝謝。

+3

不應該有錯誤。你能添加調試器的詳細輸出嗎? – Buglinjo

+0

@Buglinjo服務器現在正在關閉,所以我不能顯示輸出,但是如果我在mysql中運行代碼,錯誤是這樣的 '不正確的日期時間值:'%2017-08-29%'列'datetime_in' ' – skadevz

+0

你應該在varchar或文本上使用類似filter的日期時間。在日期時間只需使用= – Buglinjo

回答

0

無法使用like比較日期時間列。

使用=進行比較,如評論中所建議的,也不會產生期望的結果,插值2017-08-292017-08-29 00:00:00(見SO Answer)。

1.鑄列DATE

假設你使用MySQL,你可以施放查詢列的類型DATE這樣的:

$query->whereRaw('DATE(datetime_in) = ?', [$day])… 

的PostgreSQL:

$query->whereRaw('datetime_in::date = ?', [$day])… 

2.哪裏有

或者,您可以使用whereBetween進行查詢,並使用Carbon指定一天的開始結束時間。

use Carbon\Carbon; 

$startOfDay = new Carbon($datetime)->startOfDay(); 
$endOfDay = new Carbon($datetime)->endOfDay(); 

$query->whereBetween('datetime_in', [$startOfDay, $endOfDay])… 
+0

都是作品,謝謝 – skadevz