where('status', 1)->find(); if (!$medal) { return [false, '勋章不存在或未启用']; } $exists = Db::name('member_medal') ->where('uid', $uid) ->where('medal_id', $medalId) ->find(); if ($exists) { return [true, '已拥有该勋章']; } Db::name('member_medal')->insert([ 'uid' => $uid, 'medal_id' => $medalId, 'create_at' => time(), ]); return [true, '恭喜获得勋章:' . $medal->title]; } /** * 取某用户拥有的勋章列表(含勋章信息) */ public static function getUserMedals(int $uid): array { self::ensureSchema(); // 确保 user_medal 关联表已就绪(静态入口也可能在未实例化模型时被调用) if ($uid <= 0) { return []; } return Db::name('member_medal') ->alias('um') ->join('medal m', 'm.id = um.medal_id') ->where('um.uid', $uid) ->where('m.delete_at', 0) ->field('m.id,m.title,m.image,m.description,um.create_at') ->order('um.create_at', 'desc') ->select() ->toArray(); } /** * 表自愈:确保勋章相关表(medal / member_medal)已就绪。 */ public static function ensureSchema(): void { $prefix = BaseModel::currentPrefix(); BaseModel::ensureTableFromInstall($prefix, 'medal'); BaseModel::ensureTableFromInstall($prefix, 'member_medal'); } }