where('appearance_id', $appearanceId)->count(); if ($count > 0) { return; } $baseDistId = config('dictionary.base_dist_id'); //复制 DB::statement(" INSERT INTO `dist_appearance_template` (`dist_id`, `appearance_id`, `file_name`, `file_path`, `content`, `created_at`, `updated_at`, `template_code`) SELECT {$distId}, `appearance_id`, `file_name`, `file_path`, `content`, NOW(), NOW(), `template_code` FROM `dist_appearance_template` WHERE `dist_id` = {$baseDistId} AND `appearance_id` = {$appearanceId}; "); } public static function deleteTemplates($appearanceId,$distId) { self::where('dist_id',$distId)->where('appearance_id',$appearanceId)->delete(); return true; } public function syncAppearanceTemplates($appearanceId,$distId) { $appearanceId = intval($appearanceId); $distId = intval($distId); $criteria = ['dist_id' => $distId, 'appearance_id' => $appearanceId]; $tmpModel = $this; $tempRecords = $tmpModel ->where($criteria) ->get(); $siteModel = new SiteAppearanceTemplate(); $siteRecords = $siteModel ->where($criteria) ->get() ->keyBy('id'); // Use IDs as keys for easier comparison foreach ($tempRecords as $tempRecord) { $siteRecord = $siteRecords->get($tempRecord->id); if ($siteRecord) { // If record exists in `site_appearance_template`, check for updates if ($tempRecord->updated_at > $siteRecord->updated_at) { $siteModel->where('id', $siteRecord->id) ->update([ 'file_name' => $tempRecord->file_name, 'file_path' => $tempRecord->file_path, 'content' => $tempRecord->content, 'updated_at' => Carbon::now(), ]); } } else { // If record does not exist, insert it $siteModel->insert([ 'id' => $tempRecord->id, 'dist_id' => $tempRecord->dist_id, 'appearance_id' => $tempRecord->appearance_id, 'file_name' => $tempRecord->file_name, 'file_path' => $tempRecord->file_path, 'content' => $tempRecord->content, 'created_at' => Carbon::now(), 'updated_at' => Carbon::now(), 'template_code' => $tempRecord->template_code, ]); } } // Delete records from `site_appearance_template` that don’t match `dist_id=1` and `appearance_id=1` $siteModel ->where($criteria) ->whereNotIn('id', $tempRecords->pluck('id')->toArray()) ->delete(); } }