X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/c7a2d568bf693add30c8402d68d1f46f09a44c5b..refs/pull/3918/head:/app/Entities/Models/BookChild.php diff --git a/app/Entities/Models/BookChild.php b/app/Entities/Models/BookChild.php index f05a25499..ed08f16e6 100644 --- a/app/Entities/Models/BookChild.php +++ b/app/Entities/Models/BookChild.php @@ -1,20 +1,39 @@ -addSelect(['book_slug' => function ($builder) { + $builder->select('slug') + ->from('books') + ->whereColumn('books.id', '=', 'book_id'); + }]); + }); + } /** - * Scope a query to find items where the the child has the given childSlug + * Scope a query to find items where the child has the given childSlug * where its parent has the bookSlug. */ public function scopeWhereSlugs(Builder $query, string $bookSlug, string $childSlug) @@ -28,11 +47,10 @@ abstract class BookChild extends Entity /** * Get the book this page sits in. - * @return BelongsTo */ public function book(): BelongsTo { - return $this->belongsTo(Book::class); + return $this->belongsTo(Book::class)->withTrashed(); } /** @@ -40,14 +58,19 @@ abstract class BookChild extends Entity */ public function changeBook(int $newBookId): Entity { + $oldUrl = $this->getUrl(); $this->book_id = $newBookId; $this->refreshSlug(); $this->save(); $this->refresh(); + if ($oldUrl !== $this->getUrl()) { + app()->make(ReferenceUpdater::class)->updateEntityPageReferences($this, $oldUrl); + } + // Update all child pages if a chapter if ($this instanceof Chapter) { - foreach ($this->pages as $page) { + foreach ($this->pages()->withTrashed()->get() as $page) { $page->changeBook($newBookId); } }