model = new DiceRewardConfig(); } /** * 新增前:非 BIGWIN 时强制 weight=0 */ public function add(array $data): mixed { $data = $this->normalizeWeightByTier($data); return parent::add($data); } /** * 修改前:非 BIGWIN 时强制 weight=0 */ public function edit($id, array $data): mixed { $data = $this->normalizeWeightByTier($data); return parent::edit($id, $data); } /** * 仅 tier=BIGWIN 时保留 weight(且限制 0-100),否则强制为 0 */ private function normalizeWeightByTier(array $data): array { $tier = isset($data['tier']) ? (string) $data['tier'] : ''; if ($tier !== 'BIGWIN') { $data['weight'] = 0; return $data; } $w = isset($data['weight']) ? (float) $data['weight'] : 0; $data['weight'] = max(0, min(100, $w)); return $data; } }