关于推送消息小红点问题(用户是否查看)

需求:向用户推送一条消息,怎么判断哪个用户看了,哪个用户没有看?

解决办法:数据库创建个表,用来存储用户是否查看,表字段,id,uid,pid,uid存储的是用户id,pid存储的是消息id

当用户查看消息的时候,传入当前用户id和当前消息id,存储在查看表中。

在前端请求数据的时候,根据前端传过来当前用户的uid,然后后台查询需要推送的消息,查询判断当前存储状态的表有没有这条数据。

代码:

 #消息推送接口
    public function index($page=1){
     $uid=input('param.uid');
     
     $data=Db::name('push')
          ->page($page,5)    
          ->select();
      $arr=array(); 
        
        foreach ($data as $k => $v) {
            foreach ($v as $kk => $vv) {
                if ($kk=="create_time") {
                  $onlion=Db::name('push_onlion')->where(['uid'=>$uid,'pid'=>$v['id']])->count(); //查看数据库中有么有这条数据
                  if (empty($onlion)) {
                    $v['onlion']=0;
                  }else{
                    $v['onlion']=1;
                  }
                 
                }         
            }
           $arr[$k]=$v; //
        }
      
     $pg=db('push') 
        ->count('id');
     $pages=ceil($pg/5); //分页总页数,向上取整  
    

     if (empty($data)){
            return json(["code"=>"0","msg"=>"成功","data"=>$data]); 
        }else{
            
            return json(["code"=>"0","msg"=>"成功","data"=>$arr,"pages"=>$pages]);
        }
   }


   #改变状态
   public function onlion(){    
    $data=input('param.');
    $stmt=Db::name('push_onlion')->where('uid','=',$data['uid'])->where('pid','=',$data['pid'])->count(); //判断数据库是否已有这条数据
      if ($stmt) {
        return json(["code"=>"1","msg"=>"数据库已有数据"]);  
      }elseif($menu =PushModel::create($data)){
             return json(["code"=>"0","msg"=>"成功",]);
      } else {
           return json(["code"=>"1","msg"=>"失败"]); 
      }     
   }
原文地址:https://www.cnblogs.com/cyk2/p/11347231.html