'department_id']; //简写省略id,默认后台用户表的id /** * 时间转换 * @param DateTimeInterface $date * @return string */ protected function serializeDate(DateTimeInterface $date): string { return $date->format('Y-m-d H:i:s'); } public function __construct(array $attributes = []) { parent::__construct($attributes); $this->setTable(plugin()->webman->config('database.player_table')); } public function wallet(): HasOne { return $this->hasOne(plugin()->webman->config('database.player_platform_cash_model'))->where('platform_id', PlayerPlatformCash::PLATFORM_SELF); } public function player_level(): BelongsTo { return $this->belongsTo(plugin()->webman->config('database.player_level_model'), 'level', 'level'); } /** * 玩家扩展信息 * @return HasOne */ public function player_extend(): HasOne { return $this->hasOne(plugin()->webman->config('database.player_extend_model'), 'player_id'); } public function player_promoter(): HasOne { return $this->hasOne(PlayerPromoter::class, 'player_id'); } /** * 渠道信息 * @return BelongsTo */ public function channel(): BelongsTo { return $this->belongsTo(plugin()->webman->config('database.channel_model'), 'department_id', 'department_id')->withTrashed(); } /** * 提现信息 * @return hasMany */ public function player_withdraw_record(): hasMany { return $this->hasMany(plugin()->webman->config('database.player_withdraw_record_model'), 'player_id'); } /** * 提现信息 * @return hasMany */ public function player_recharge_record(): hasMany { return $this->hasMany(plugin()->webman->config('database.player_recharge_record_model'), 'player_id'); } /** * 推荐玩家 * @return BelongsTo */ public function recommend_player(): BelongsTo { return $this->belongsTo(plugin()->webman->config('database.player_model'), 'recommend_id'); } public function the_last_player_login_record(): HasOne { return $this->hasOne(PlayerLoginRecord::class, 'player_id')->latest(); } public function player_register_record(): HasOne { return $this->hasOne(PlayerRegisterRecord::class, 'player_id'); } /** * 密码哈希加密 * @param $value */ public function setPasswordAttribute($value) { $this->attributes['password'] = password_hash($value, PASSWORD_DEFAULT); } /** * 支付密码哈希加密 * @param $value */ public function setPlayPasswordAttribute($value) { $this->attributes['play_password'] = password_hash($value, PASSWORD_DEFAULT); } /** * 获取器 - 标签id * @param $value * @return false|string[] */ public function getPlayerTagAttribute($value) { return array_filter(explode(',', $value)); } /** * 修改器 - 标签id * @param $value * @return string */ public function setPlayerTagAttribute($value): string { $idsStr = json_encode($value); $cacheKey = md5("player_tag_options_ids_$idsStr"); Cache::delete($cacheKey); return $this->attributes['player_tag'] = implode(',', $value); } /** * 获取器 - 玩家头像 * @param $value * @return false|string[] */ public function getAvatarAttribute($value) { return is_numeric($value) ? config('def_avatar.' . $value) : $value; } /** * 玩家平台账号 * @return hasMany */ public function playerGamePlatform(): hasMany { return $this->hasMany(plugin()->webman->config('database.player_game_platform_model'), 'player_id'); } /** * 所属推广员 * @return BelongsTo */ public function recommend_promoter(): BelongsTo { return $this->belongsTo(plugin()->webman->config('database.player_promoter_model'), 'recommend_id', 'player_id'); } /** * 模型的 "booted" 方法 * * @return void */ protected static function booted() { static::updated(function (Player $player) { $columns = [ 'type', 'status', 'status_withdraw', 'status_open_coins', 'status_open_coins', 'name', 'phone', 'country_code', 'play_password', 'password', 'flag', 'avatar', 'player_tag', ]; if ($player->wasChanged($columns) && !empty(Admin::user())) { $orData = $player->getOriginal(); $changeData = $player->getChanges(); $orDataArr = []; $newDataArr = []; foreach ($changeData as $key => $item) { if (empty($item) == empty($orData[$key])) { continue; } if ($key == 'updated_at') { $orData[$key] = date('Y-m-d H:i:s', strtotime($orData[$key])); } $orDataArr[$key] = $orData[$key]; $newDataArr[$key] = $item; } if (!empty($newDataArr)) { $playerEditLog = new PlayerEditLog(); $playerEditLog->player_id = $player->id; $playerEditLog->department_id = $player->department_id; $playerEditLog->origin_data = json_encode($orDataArr); $playerEditLog->new_data = json_encode($newDataArr); $playerEditLog->user_id = Admin::id() ?? 0; $playerEditLog->user_name = !empty(Admin::user()) ? Admin::user()->username : ''; $playerEditLog->save(); } } }); } }