$bookSlug = $matches[1];
/** @var ?Book $model */
- $model = Book::query()->where('slug', '=', $bookSlug)->first();
+ $model = Book::query()->where('slug', '=', $bookSlug)->first(['id']);
return $model;
}
$shelfSlug = $matches[1];
/** @var ?Bookshelf $model */
- $model = Bookshelf::query()->where('slug', '=', $shelfSlug)->first();
+ $model = Bookshelf::query()->where('slug', '=', $shelfSlug)->first(['id']);
return $model;
}
$chapterSlug = $matches[2];
/** @var ?Chapter $model */
- $model = Chapter::query()->whereSlugs($bookSlug, $chapterSlug)->first();
+ $model = Chapter::query()->whereSlugs($bookSlug, $chapterSlug)->first(['id']);
return $model;
}
$pageSlug = $matches[2];
/** @var ?Page $model */
- $model = Page::query()->whereSlugs($bookSlug, $pageSlug)->first();
+ $model = Page::query()->whereSlugs($bookSlug, $pageSlug)->first(['id']);
return $model;
}
$id = intval($matches[1]);
/** @var ?Page $model */
- $model = Page::query()->find($id);
+ $model = Page::query()->find($id, ['id']);
return $model;
}
{
Reference::query()
->where('from_type', '=', (new Page())->getMorphClass())
- ->truncate();
+ ->delete();
Page::query()->select(['id', 'html'])->chunk(100, function(Collection $pages) {
$this->updateForPages($pages->all());
--- /dev/null
+<?php
+
+namespace Tests\Commands;
+
+use BookStack\Entities\Models\Page;
+use Illuminate\Support\Facades\DB;
+use Tests\TestCase;
+
+class RegenerateReferencesCommandTest extends TestCase
+{
+ public function test_regenerate_references_command()
+ {
+ /** @var Page $page */
+ $page = Page::query()->first();
+ $book = $page->book;
+
+ $page->html = '<a href="' . $book->getUrl() . '">Book Link</a>';
+ $page->save();
+
+ DB::table('references')->delete();
+
+ $this->artisan('bookstack:regenerate-references')
+ ->assertExitCode(0);
+
+ $this->assertDatabaseHas('references', [
+ 'from_id' => $page->id,
+ 'from_type' => $page->getMorphClass(),
+ 'to_id' => $book->id,
+ 'to_type' => $book->getMorphClass(),
+ ]);
+ }
+}