123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- <?php
- namespace App\Models;
- use App\Services\Api\GameService;
- use Carbon\Carbon;
- use Dcat\Admin\Traits\HasDateTimeFormatter;
- use Illuminate\Database\Eloquent\Factories\HasFactory;
- use Illuminate\Database\Eloquent\Model;
- use Illuminate\Database\Eloquent\SoftDeletes;
- class Game extends Model
- {
- use HasFactory, SoftDeletes, HasDateTimeFormatter;
- protected $hidden = [
- 'updated_at',
- 'deleted_at',
- ];
- public function game_types()
- {
- return $this->belongsTo(GameType::class, 'game_type_id', 'id');
- }
- //这个查不出来虚拟球员,所以没有用到
- public function users()
- {
- return $this->belongsToMany(User::class, 'game_users', 'game_id', 'user_id');
- }
- //关联发起人
- public function creator_s()
- {
- return $this->belongsTo(User::class, 'creator', 'id');
- }
- //关联比赛场地
- public function course()
- {
- return $this->belongsTo(Course::class, 'course_id', 'id');
- }
- public static function getGameInfo($id)
- {
- $info = self::where('games.id', $id)
- ->leftJoin('game_types', 'game_types.id', '=', 'games.game_type_id')
- ->leftJoin('courses', 'courses.id', '=', 'games.course_id')
- ->select('games.id as game_id', 'games.name', 'games.creator', 'begin_time',
- 'game_types.name as game_type', 'game_types.scale', 'courses.name as course_name', 'courses.img as course_avatar')
- ->first();
- if(empty($info)){
- return [];
- }
- $info = $info->toArray();
- $info['actual_num'] = self::getActualCount($id);
- $timeParse = Carbon::parse($info['begin_time']);
- $info['begin_time'] = $timeParse->format('Y-m-d H:i');
- $info['month'] = $timeParse->format('Y-m');
- $info['date1'] = $timeParse->format('Y-m-d');
- $info['date2'] = $timeParse->format('m-d');
- $info['time1'] = $timeParse->format('m-d H:i');
- $info['time2'] = $timeParse->format('H:i');
- $info['week1'] = $timeParse->format('w');
- switch ($info['week1']){
- case 1:
- $week = 'Mon';
- break;
- case 2:
- $week = 'Tue';
- break;
- case 3:
- $week = 'Wed';
- break;
- case 4:
- $week = 'Thu';
- break;
- case 5:
- $week = 'Fri';
- break;
- case 6:
- $week = 'Sat';
- break;
- default:
- $week = 'Sun';
- break;
- }
- $info['week2'] = $week;
- $info['for_human_read'] = $timeParse->diffForHumans();
- $info['players'] = (new GameService())->getGameUsers($id);
- return $info;
- }
- //获取比赛的当前实际人数
- public static function getActualCount($gameId)
- {
- $count = GameUser::query()
- ->where('game_id', $gameId)
- ->where('status', 1)
- ->whereNull('deleted_at')
- ->count('id');
- return $count;
- }
- }
|