From 0930e8519c508d46a848db93c76f258da5ee84a9 Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Mon, 25 Apr 2022 18:31:37 +0100 Subject: [PATCH] Updated polymorphic database relation types to simpler version - Means we can use these simpler types in API response, As desired in #3377. Closes #3395 --- app/Providers/AppServiceProvider.php | 12 ++-- ..._04_25_140741_update_polymorphic_types.php | 64 +++++++++++++++++++ 2 files changed, 70 insertions(+), 6 deletions(-) create mode 100644 database/migrations/2022_04_25_140741_update_polymorphic_types.php diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index fc712632e..3c1212e32 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -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 index 000000000..4645ab2db --- /dev/null +++ b/database/migrations/2022_04_25_140741_update_polymorphic_types.php @@ -0,0 +1,64 @@ + '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]); + } + } + } +}