Example #1
0
 public static function createNoticeRecord(array $options)
 {
     // 获取通知记录ID
     $noticeRecordId = $options['notice_record_id'];
     // 如果提供了接收通知的用户ID,则取得用户对应的email
     if (isset($options['user_id'])) {
         // 对用户进行通知,list的key为user_id
         $isNoticeUser = true;
         // 如果只有一个用户,则转换为数组
         if (!is_array($options['user_id'])) {
             $options['user_id'] = [$options['user_id']];
         }
         // 将email关联到user_id上,key为user_id,value为email
         $list = User::assocEmailByUserIds($options['user_id']);
     } else {
         // false,不是对站内用户进行通知,list的key为没有意义,user_id为0
         $isNoticeUser = false;
         // 如果只有一个,同样转换为数组
         if (!is_array($options['email'])) {
             $options['email'] = [$options['email']];
         }
         // 设置list为这些email
         $list = $options['email'];
     }
     // 如果list为空,则不进行后续处理
     if (!$list) {
         return;
     }
     $time = time();
     // 当前unix时间戳
     // 为防止需要插入的记录太多,对list进行分块
     $list = array_chunk($list, 1000, true);
     // 开始遍历,并插入记录
     foreach ($list as $chunk) {
         $data = [];
         // 本次需要插入的全部记录
         // 遍历这个chunk,将每项添加至data中准备插入
         foreach ($chunk as $key => $email) {
             $data[] = ['notice_record_id' => $noticeRecordId, 'user_id' => $isNoticeUser ? $key : 0, 'email' => $email, 'created_at' => $time, 'updated_at' => $time, 'status' => static::STATUS_WAIT, 'failure_reason' => ''];
         }
         static::insert($data);
         // 插入记录
     }
     // 取得插入的emails并返回,key为记录ID,value为email
     $emails = static::where('notice_record_id', $noticeRecordId)->lists('email', 'id');
     if ($emails) {
         $emails = $emails->toArray();
     }
     return $emails;
 }