- #1
现算法
$seed = crc32($lottery->id . $lottery->created_at);
srand($seed); // 使用种子初始化随机数生成器
$participantIds = $lottery->participants()->pluck('id')->toArray();
shuffle($participantIds); // 打乱顺序
$winnerIds = array_slice($participantIds, 0, $lottery->amount);
// 根据 winnerIds 查询中奖者
$winners = $lottery->participants()->whereIn('id', $winnerIds)->get();
$lottery->participants()->whereIn('id', $winnerIds)->update(['status' => 1]);
原算法
$winners = $lottery->participants()
->inRandomOrder()
->limit($lottery->amount)
->get();
$winnerIds = $winners->pluck('id');
$lottery->participants()->whereIn('id', $winnerIds)->update(['status' => 1]);