]> BookStack Code Mirror - bookstack/commitdiff
Updated polymorphic database relation types to simpler version
authorDan Brown <redacted>
Mon, 25 Apr 2022 17:31:37 +0000 (18:31 +0100)
committerDan Brown <redacted>
Mon, 25 Apr 2022 17:31:37 +0000 (18:31 +0100)
- Means we can use these simpler types in API response, As desired in #3377.

Closes #3395

app/Providers/AppServiceProvider.php
database/migrations/2022_04_25_140741_update_polymorphic_types.php [new file with mode: 0644]

index fc712632e9b876117f605d36d5bd0971f4290468..3c1212e3274d5b23a42da1f8d9df26a1630bcdc8 100644 (file)
@@ -51,12 +51,12 @@ class AppServiceProvider extends ServiceProvider
         // Allow longer string lengths after upgrade to utf8mb4
         Schema::defaultStringLength(191);
 
-        // Set morph-map due to namespace changes
-        Relation::morphMap([
-            'BookStack\\Bookshelf' => Bookshelf::class,
-            'BookStack\\Book'      => Book::class,
-            'BookStack\\Chapter'   => Chapter::class,
-            'BookStack\\Page'      => Page::class,
+        // Set morph-map for our relations to friendlier aliases
+        Relation::enforceMorphMap([
+            'bookshelf' => Bookshelf::class,
+            'book'      => Book::class,
+            'chapter'   => Chapter::class,
+            'page'      => Page::class,
         ]);
 
         // View Composers
diff --git a/database/migrations/2022_04_25_140741_update_polymorphic_types.php b/database/migrations/2022_04_25_140741_update_polymorphic_types.php
new file mode 100644 (file)
index 0000000..4645ab2
--- /dev/null
@@ -0,0 +1,64 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Support\Facades\DB;
+
+class UpdatePolymorphicTypes extends Migration
+{
+    /**
+     * Mapping of old polymorphic types to new simpler values.
+     */
+    protected $changeMap = [
+        'BookStack\\Bookshelf' => 'bookshelf',
+        'BookStack\\Book'      => 'book',
+        'BookStack\\Chapter'   => 'chapter',
+        'BookStack\\Page'      => 'page',
+    ];
+
+    /**
+     * Mapping of tables and columns that contain polymorphic types.
+     */
+    protected $columnsByTable = [
+        'activities' => 'entity_type',
+        'comments'   => 'entity_type',
+        'deletions'  => 'deletable_type',
+        'entity_permissions' => 'restrictable_type',
+        'favourites' => 'favouritable_type',
+        'joint_permissions' => 'entity_type',
+        'search_terms' => 'entity_type',
+        'tags' => 'entity_type',
+        'views' => 'viewable_type',
+    ];
+
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        foreach ($this->columnsByTable as $table => $column) {
+            foreach ($this->changeMap as $oldVal => $newVal) {
+                DB::table($table)
+                    ->where([$column => $oldVal])
+                    ->update([$column => $newVal]);
+            }
+        }
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        foreach ($this->columnsByTable as $table => $column) {
+            foreach ($this->changeMap as $oldVal => $newVal) {
+                DB::table($table)
+                    ->where([$column => $newVal])
+                    ->update([$column => $oldVal]);
+            }
+        }
+    }
+}