签到的一些基本逻辑
思维导图

控制器
//签到
public function userQian(Request $request){
if(empty($request['user_id'])){
return ['code'=>1,'msg'=>'参数不能为空','result'=>null];
}
$current_time = date('Y-m-d',time());
//调用方法查看今天是否签到过
$count = Qian::getCount($request['user_id'],$current_time);
if($count>0){
return ['code'=>1,'msg'=>'已经签过了','result'=>null];
}
//查询上次签到的时间
$res = Qian::lastDay($request['user_id']);
//当前时间-最近一次签到的时间 = 中间的时间差
$timec = (strtotime($current_time)-strtotime($res['q_time']))/60/60/24;
if($timec==1){
//表示是连续签到
$last_days = $res['q_day']+1;
}else{
$last_days = 1;
}
//调用方法完成签到的功能
if(Qian::qiandao($request['user_id'],$current_time,$last_days)){
return ['code'=>0,'msg'=>'签到成功','result'=>$last_days];
}else{
return ['code'=>1,'msg'=>'签到失败','result'=>null];
}
}
模型层
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Qian extends Model
{
protected $table = 'qian';
public $timestamps = false;
//查询用户当天是否签到成功
static public function getCount($user,$time){
return self::where('user_id',$user)
->where('q_time',$time)
->count();
}
//查询上次签到的时间
static public function lastDay($user){
return self::where('user_id',$user)
->orderByDesc('q_id')
->limit(1)
->select(['q_time','q_day'])
->first();
}
static public function qiandao($user_id,$ctime,$num){
//根据用户id查看有没有记录
$count = self::where('user_id',$user_id)->count();
if($count>0){
//有记录更新
return self::where('user_id',$user_id)->update([
'q_time'=>$ctime,
'q_day'=>$num
]);
}else{
//没有记录入库
return self::insert([
'user_id'=>$user_id,
'q_time'=>$ctime,
'q_day'=>$num
]);
}
}
}
数据表
CREATE TABLE `qian` (
`q_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
`user_id` int(11) DEFAULT NULL,
`q_time` date DEFAULT NULL,
`q_day` int(11) DEFAULT '0',
PRIMARY KEY (`q_id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
优秀的背后都是加倍的努力!!!


浙公网安备 33010602011771号