function ($params) { return [ 'filters' => $params['filters'], 'fields' => ['id', 'adp_id', 'type', 'img', 'href', 'price', 'status', 'sort', 'creater', 'created_at', 'updated_at'], 'relations' => [ 'translation' => ['ad_id', 'alt', 'title'], ], 'sorts' => [ ['field' => 'sort', 'direction' => 'desc'], ['field' => 'created_at', 'direction' => 'desc'], ], 'pagination' => [ 'page' => $params['page'] ?? 1, 'per_page' => $params['per_page'] ?? 8, ] ]; }, 'show' => function ($params) { return [ 'filters' => $params['filters'], 'fields' => ['id', 'adp_id', 'type', 'img', 'href', 'price', 'status', 'sort', 'creater', 'created_at', 'updated_at'], 'relations' => [ 'translation' => ['ad_id', 'alt', 'title'], ], 'sorts' => [ ['field' => 'sort', 'direction' => 'desc'], ['field' => 'created_at', 'direction' => 'desc'], ], ]; }, ]; } protected array $translatable = [ 'alt', 'title' ]; public function add(array $params) { $sourceLocale = locale(); $sourceFields = $this->extractSourceFields($params); if (empty($sourceFields)) { throw new \InvalidArgumentException("请传递至少一条 {$sourceLocale} 语言的翻译字段"); }; Db::beginTransaction(); try { $info = $this->create($params); if (!$info) { throw new BusinessException('提交失败'); } // 异步翻译并写入 hs_ad_translation 表 (new TranslationService())->queueTranslations( 'ad', $info->id, $sourceLocale, $sourceFields ); Db::commit(); return $info->id; } catch (\Throwable $th) { Db::rollBack(); throw $th; } } public function edit(array $params, int $id) { $sourceLocale = locale(); $sourceFields = $this->extractSourceFields($params); if (empty($sourceFields)) { throw new \InvalidArgumentException("请传递至少一条 {$sourceLocale} 语言的翻译字段"); }; Db::beginTransaction(); try { $info = $this->update($id, $params); if (!$info) { throw new BusinessException('提交失败'); } // 异步翻译并写入 hs_ad_translation 表 AdTranslationModel::updateOrCreate( [ 'ad_id' => $id, 'locale' => $sourceLocale, ], $sourceFields ); Db::commit(); return true; } catch (\Throwable $th) { Db::rollBack(); throw $th; } } }