2015-04-21 36 views
1

我試圖用laravel來製作通知系統。我的想法是獲取數據並立即更新「is_delivered」標誌。Laravel - 如何更新整個集合

這是代碼:

Model: 

public function scopeGetForView($query) 
{ 
    $query->orderBy('created_at','DESC'); 

    $return = $query->get(); 

    if($return->count() > 0) { 
     $query->update(array("is_delivered" => 1)); 
    } 

    return $return; 
} 

Controller: 

$notifications = Auth::user()->notifications()->limit(10)->offset(10)->getForView(); 

那麼,這將很好地工作,而不偏移更新時,因爲MySQL只做支持的限制(不偏移)。

但是,我怎樣才能更新整個集合沒有循環呢?隨着即時更新循環會導致許多查詢。我能想到的另一種方式是創建一個帶有ID的數組,並使用whereIn()更新它們。這是唯一的方法嗎?

回答

1

您可以在整個集合運行的更新:

DB::table('table_name')->whereIn('id', $collection->modelKeys())->update(['is_delivered' => 1]); 
+0

不錯!沒有聽說過模型的凱斯方法。稍後再嘗試。謝謝! – sleepless

+0

只適用於雄辯的收藏! – Scopey

+0

完美地工作。再次感謝! :) – sleepless