-<?php namespace BookStack\Entities;
+<?php
+namespace BookStack\Entities\Models;
+
+use BookStack\References\ReferenceUpdater;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
/**
- * Class BookChild
- * @property int $book_id
- * @property int $priority
- * @property Book $book
- * @method Builder whereSlugs(string $bookSlug, string $childSlug)
+ * Class BookChild.
+ *
+ * @property int $book_id
+ * @property int $priority
+ * @property string $book_slug
+ * @property Book $book
*/
abstract class BookChild extends Entity
{
-
- /**
- * Scope a query to find items where the the child has the given childSlug
- * where its parent has the bookSlug.
- */
- public function scopeWhereSlugs(Builder $query, string $bookSlug, string $childSlug)
- {
- return $query->with('book')
- ->whereHas('book', function (Builder $query) use ($bookSlug) {
- $query->where('slug', '=', $bookSlug);
- })
- ->where('slug', '=', $childSlug);
- }
-
/**
* Get the book this page sits in.
- * @return BelongsTo
*/
public function book(): BelongsTo
{
- return $this->belongsTo(Book::class);
+ return $this->belongsTo(Book::class)->withTrashed();
}
/**
*/
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)->updateEntityReferences($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);
}
}