model = new WechatMiniProgram(); } public function add(array $data): mixed { $data = $this->normalizeConfig($data); $this->ensureAppidAvailable($data['appid']); return parent::add($data); } public function edit($id, array $data): mixed { $data = $this->normalizeConfig($data); $this->ensureAppidAvailable($data['appid'], (int) $id); unset( $data['id'], $data['partner_id'], $data['partner_nickname'], $data['partner_account'], $data['partner_name'], $data['created_by'], $data['create_time'] ); return parent::edit($id, $data); } private function normalizeConfig(array $data): array { foreach (self::CONFIG_FIELDS as $field) { if (array_key_exists($field, $data) && is_string($data[$field])) { $data[$field] = trim($data[$field]); } } return $data; } private function ensureAppidAvailable(string $appid, ?int $ignoreId = null): void { $query = $this->model->where('appid', '=', $appid); if ($ignoreId !== null) { $query->where('id', '<>', $ignoreId); } if ($query->count() > 0) { throw new ApiException('该小程序 APPID 已经绑定'); } } }