Browse Source

naming_rule_id extend parent

peterguo 1 month ago
parent
commit
124becd1cd

+ 8 - 0
app/Http/Controllers/API/FolderController.php

@@ -440,6 +440,14 @@ class FolderController extends Controller
 
     }
 
+    /**
+     * 针对一级文件夹设定命名规则
+     *
+     * @param string $folderId
+     * @param string $namingRuleId
+     * @param FoldersService $foldersService
+     * @return void
+     */
     public function applyNaming(string $folderId, string $namingRuleId, FoldersService $foldersService): void
     {
         $foldersService->applyNaming($folderId, $namingRuleId);

+ 13 - 4
app/Services/Folder/FoldersService.php

@@ -2,8 +2,10 @@
 
 namespace App\Services\Folder;
 
+use App\Models\File;
 use App\Models\Folder;
 use App\Models\NamingRule;
+use Illuminate\Support\Facades\DB;
 
 class FoldersService
 {
@@ -11,9 +13,16 @@ class FoldersService
     {
         $folder = Folder::query()->findOrFail($id);
         $namingRule = NamingRule::query()->findOrFail($namingRuleId);
-        // 子孙文件夹均需更新
-        Folder::query()
-            ->where('path', 'like', $folder->path . '%')
-            ->update(['naming_rule_id' => $namingRule->id]);
+        // 子孙均需更新
+        DB::transaction(function () use ($folder, $namingRule) {
+            Folder::query()
+                ->where('path', 'like', $folder->path . '%')
+                ->update(['naming_rule_id' => $namingRule->id]);
+
+            File::query()
+                ->join('folders', 'files.folder_id', '=', 'folders.id')
+                ->where('folders.path', 'like', $folder->path . '%')
+                ->update(['files.naming_rule_id' => $namingRule->id]);
+        });
     }
 }