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

Laravel实现批量发送短信记录存入wc_sms_status数据库的方法

代码修改方案

你原有代码存在几处逻辑错误和语法问题,修正后可正常实现插入status=1的需求,具体修改如下:

核心修改点

  • 首先修正逻辑判断错误:原代码if (!$userNumber->mobile_num)是判断没有手机号才发短信,逻辑完全倒置,需要改成if ($userNumber->mobile_num),即存在手机号才执行发送逻辑
  • 插入数据时不要写死字符串'id'/'mobile_num',要读取遍历对象的对应属性
  • 插入数组中直接新增'status' => 1字段即可设置状态值为1
  • 修正elseif分支的非法语法,需要先查询wc_sms_status表是否存在对应记录且状态为0,再执行更新操作

修改后完整代码

public function SendBulkSms()
{  
    $usersNumber = User::select('id','mobile_num')->whereIn('id', [5,6,7,8])->get();  
    foreach($usersNumber as $userNumber)
    {  
        // 存在手机号才执行发送逻辑
        if ($userNumber->mobile_num) 
        {
            // 调用短信发送接口
            $this->sendSmsFunction($userNumber->mobile_num);
            // 先查当前用户是否已有短信状态记录
            $existRecord = DB::table('wc_sms_status')->where('user_id', $userNumber->id)->first();
            if (!$existRecord) {
                // 无记录则插入新数据,设置status=1
                DB::table('wc_sms_status')->insert([
                    'user_id' => $userNumber->id,
                    'mobile_num' => $userNumber->mobile_num,
                    'status' => 1
                ]);
            } elseif ($existRecord->status == 0) {
                // 已有记录且状态为0则更新状态为1
                DB::table('wc_sms_status')->where('user_id', $userNumber->id)->update([
                    'status' => 1
                ]);
            }
        }
   }
}

补充说明

如果你的sendSmsFunction存在发送失败的情况,可以根据接口返回的结果动态设置status值,比如发送成功设为1,失败设为0,灵活调整即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:39:00