Laravel - 如何更新整个集合

时间:2015-04-21 22:38:57

标签: php mysql laravel

我正在尝试使用laravel制作通知系统。我的想法是获取数据并立即更新“is_delivered”标志。

这是代码:

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 个答案:

答案 0 :(得分:2)

您可以对整个集合运行更新:

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