我想通知每一个一周未通知的用户。
代码如下:
// 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
完成为止?