// 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
--- /dev/null
+<?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]);
+ }
+ }
+ }
+}