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
相关产品推荐
相关产品推荐

