2015-04-02 54 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();函数,因为我想获取时间戳,而不是日期格式。