You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel中批量更新选中用户的stime字段?

解决Laravel批量更新用户stime字段的问题

嘿,我一眼就看出你这段代码的问题啦——你现在拿到的$user是个查询构造器实例,不是具体的User模型对象,所以直接给它赋值stime再调用save()根本不会生效,因为save()是模型实例才有的方法,查询构造器不认这个~

先给你两种场景的正确实现方案:

场景1:更新所有admin_id = $ll的用户的stime字段

如果你的需求是把所有属于该admin的用户的stime统一改成某个值,直接用Laravel查询构造器的update()方法就行,这是最高效的批量更新方式:

// 执行批量更新,返回被修改的行数
$updatedCount = User::where('admin_id', $ll)->update([
    'stime' => $request->select // 这里注意:如果$request->select是要设置的stime值,没问题;如果是选中的用户ID,那你参数名搞混了哦
]);

// 可以根据返回值判断更新结果
if ($updatedCount > 0) {
    // 更新成功逻辑
} else {
    // 没有用户被更新的逻辑
}

场景2:更新选中的特定用户(同时校验admin归属)

如果你的需求是只更新前端勾选的部分用户(比如前端传了选中的用户ID数组),还要确保这些用户属于当前admin,那可以加个whereIn条件:

// 假设前端传的选中用户ID数组是`selected_user_ids`,要设置的stime值是`new_stime`
$updatedCount = User::where('admin_id', $ll)
    ->whereIn('id', $request->selected_user_ids)
    ->update([
        'stime' => $request->new_stime
    ]);

必须注意的关键点:

  • 一定要把stime字段加到User模型的$fillable数组里,不然Laravel的批量赋值保护会直接阻止更新:
class User extends Model
{
    // 允许批量赋值的字段列表
    protected $fillable = ['stime', 'admin_id', /* 其他你需要批量赋值的字段 */];
}
  • 如果你的业务需要触发模型的updated事件(比如更新后要记录日志),那上面的批量update()方法不行,因为它直接执行SQL,不会加载模型实例。这时候得先查询出模型再循环保存:
User::where('admin_id', $ll)
    ->whereIn('id', $request->selected_user_ids)
    ->get()
    ->each(function ($user) use ($request) {
        $user->stime = $request->new_stime;
        $user->save(); // 这里会触发模型的updated事件
    });

不过这种方式在用户数量多的时候性能会差一些,所以根据你的业务需求选就行~

内容的提问来源于stack exchange,提问作者Dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 00:32:34