2015-04-02 104 views
1

我有一個小問題... 所以我有一個會從一個表中的所有值的代碼,Laravel刪除或更新不工作

我想刪除或更新表的值時, calumn'expire'小於time()函數。

我住在UTC +1時區,但沒關係...

我想在第一時間更新表「deleted_at」來獲取所有數據仍然在數據庫中。

所以,我怎麼能做到這一點,

如果我做了一個刪除查詢:

$del = DB::table('event')->where('expire', '<', $time)->delete(); 

它不工作...

請通過做一個幫助我(也許UPDATE查詢將deleted_at表更新爲當前時間戳?

感謝您的幫助!

回答

2

問題可能是time()返回自1970年以來的秒數,而不是時間戳。 (我假設你的數據庫列)

我建議你使用Carbon(日期庫Laravel使用)

$now = Carbon::now(); 
$del = DB::table('event')->where('expired', '<', $now)->delete(); 

或者軟刪除:

$now = Carbon::now(); 
$del = DB::table('event')->where('expired', '<', $now)->whereNull('deleted_at')->update(['deleted_at' => $now]); 
+0

它的工作原理,但我的表不斷更新,所以我想添加一個參數,說如果表deleted_at仍然是空的,然後他們可以更新,否則不....所以現在我有這個:$ del = DB :: table('event') - > where('expire','<', $time)-> update(['deleted_at'=> $ time]); – Robin 2015-04-03 05:52:36

1

感謝lukasgeiter我找到了正確的解決方案,這是解決方案:

$del = DB::table('event')->where('expire', '<', $time)->where('deleted_at', 'IS NULL')->update(['deleted_at' => $time]); 

$time變量是time();函數,因爲我想獲取時間戳,而不是日期格式。