hasMany(SiteMsgRead::class); } protected $type=[ 'data'=>'json', ]; protected static function init() { self::afterDelete(function (self $msg){ $msg->read()->delete(); }); } public static function sendMsg($msgType,$user,$extend=[]){ list($title,$content,$data)=self::getTitleByType($msgType,$extend); if($title && $content){ return self::create([ 'msg_type'=>$msgType, 'user_id'=>$user instanceof User?$user['id']:$user, 'title'=>$title, 'content'=>$content, 'data'=>$data, ]); } } public function scopeFilterUnread(Query $query,$userId){ $query->whereNotExists( SiteMsgRead::where('site_msg_id',Db::raw("{$this->getTable()}.id"))->where('user_id',$userId)->buildSql() ) ->whereIn('user_id',[0,$userId]); } public static function getTitleByType($type,$extend=[]){ $arr=['','',null]; switch ($type){ case self::TYPE_COUPON: $arr[0]='您获得了新的优惠券'; $arr[1]='您获得了新的优惠券券,请注意查收'; break; case self::TYPE_ORDER_OFFLINE_PAY_PASS: $arr[0]='您的线下付款核销已通过'; $arr[1]='您的线下付款核销已通过,请注意查看'; break; case self::TYPE_ORDER_OFFLINE_PAY_REJECT: $arr[0]='您的线下付款核销未通过'; $arr[1]='您的线下付款核销未通过,请注意查看'; break; case self::TYPE_ORDER_REFUND_PASS: $arr[0]='您申请的退货退款已通过'; $arr[1]='您申请的退货退款已通过,请注意查看'; break; case self::TYPE_ORDER_REFUND_REJECT: $arr[0]='您申请的退货退款未通过'; $arr[1]='您申请的退货退款未通过,请注意查看'; break; case self::TYPE_NEW_GOODS: $goods=$extend['goods']; $arr[0]="新产品【{$goods['name']}】全新上市"; $arr[1]="【{$goods['name']}】全新发布,请注意查看"; $arr[2]=[ 'id'=>$goods['id'], ]; break; } return $arr; } }