Laravel:这个悲观锁定的例子正确吗?

时间:2018-07-09 08:16:10

标签: php laravel-5 locking innodb

我想通知每一个一周未通知的用户。

代码如下:

// Select all users where attribute `notified` is older then one week
$users = \App\User::lastNotified(7)->get();

foreach($users as $user){
   $user->notifed = date('Y-m-d');
   \Mail::to($user)send(new NotificationMail($user));
   $user->save();
}

我想确保如果并行执行代码,则每个用户将仅收到一个通知(无重复)。

我正确理解我必须像这样使用Pessimistic Locking

DB::transaction(function () {
   $users = \App\User::lastNotified(7)->lockForUpdate()->get();

    foreach($users as $user){
       $user->notifed = date('Y-m-d');
       \Mail::to($user)send(new NotificationMail($user));
       $user->save();
    }
});

因此,如果脚本是并行执行的,则较慢的脚本B将在行$users = \App\User::lastNotified(7)->lockForUpdate()->get();上等待,直到较快的脚本A完成为止?

0 个答案:

没有答案