Laravel的数据创建、模型关联、事件监听

//  进行基本验证
$user_info = \GuzzleHttp\json_decode($request->input('rawData'),true);
//注册信息  字段名=》get到的值

json数据转为数组

$newUser = [
    'openid' => $openid, //openid
    'nickname' => $user_info['nickName'],// 昵称
    'avatar' =>$user_info['avatarUrl'], //头像
    'unionid' => isset($user_info['unionid'])?$user_info['unionid']:'', // unionid (可空)
    'password' => bcrypt('123456'),
    'level' => 'visitor',
    'user_type'=>'personnel',
    'last_login_ip' => $this->getClientIP(),
    'last_login_time' => Carbon::now()
];
       

 用户数据

 $userInfo = User::create($newUser);

创建数据

$loginlog = new UserLoginLog(['login_ip'=>$this->getClientIP(),'login_time'=>Carbon::now(),'mark'=>'小程序注册']);
 
$userInfo->login_logs()->save($loginlog);
       

通过关联模型 存 登录log

//同步信息到微信用户表
$wechatuser = new WechatUser([
    'openid' => $openid, //openid
    'unionid' => isset($user_info['unionid'])?$user_info['unionid']:'',
    'nickname' => $user_info['nickName'],// 昵称
    'avatar' =>$user_info['avatarUrl'], //头像
    'sex' => $user_info['gender'],// 性别
    'language' =>$user_info['language'], //语言
    'city' => $user_info['city'],// 城市
    'province' =>$user_info['province'], //省
    'country' => $user_info['country'],// 区
]);
$userInfo->wechat()->save($wechatuser);

通过关联模型储存数据到 wechat 用户表

// 直接创建token
$token = $userInfo->createToken($openid)->accessToken;

创建token

模型关联:

/**
  * 模型关联 start
  *
 */
//登录记录
public function login_logs()
{
   return $this->hasMany(UserLoginLog::class);
}
//关联微信
public function wechat()
{
   return $this->hasOne(WechatUser::class);
}

 EVENT事件

//用户注册事件
event(new UserRegistered($userInfo));

用户注册时间:当用户注册时,发放优惠券等等

 需要在头部引入

use App\Events\UserRegistered;

引入的UserRegistered文件

<?php

namespace App\Events;

use App\Models\User;
use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class UserRegistered
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    protected $user;
    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct(User $user)
    {
        $this->user = $user;
    }

    public function getUser()
    {
        return $this->user;
    }


}

监听器处理

<?php

namespace App\Listeners;

use App\Events\UserRegistered;
use App\Models\WashCoupon;
use App\Models\WashCouponUser;
use Carbon\Carbon;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Log;
class GiveNewUserCoupon  implements ShouldQueue
{

    /**
     * Handle the event.
     *
     * @param  UserRegistered  $event
     * @return void
     */
    public function handle(UserRegistered $event)
    {
        // 从事件对象中取出对应的用户
        $user = $event->getUser();
        $wash_coupons = WashCoupon::where(['is_to_newuser'=>1,'is_enabled'=>1])->get();
        foreach($wash_coupons as $coupon)
        {
            $expire_time = Carbon::now()->addDays($coupon->expire_day);
            $user_coupon = new WashCouponUser();
            $user_coupon->user_id = $user->id;
            $user_coupon->coupon_id = $coupon->id;
            $user_coupon->expire_time = $expire_time;
            $user_coupon->receive_time = Carbon::now();
            $user_coupon->save();
            Log::info('新用户注册发放优惠券成功,用户:'.$user->nickname);
        }
    }
}

找出发放给新用户的优惠券,发放到 用户优惠券 表中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值