Если вы хотите получить книгу с соответствующими «автором» и «книжным шкафом», вы должны были определить отношения в моделях. Например:
Книга Модель
public function author()
{
return $this->belongsTo(Author::class, 'fk_author'); // change fk_author for the key you are using
}
public function bookcase()
{
return $this->belongsTo(Bookcase::class, 'fk_bookcase');
}
Автор Модель
public function books()
{
return $this->hasMany(Book::class);
}
Книжный шкаф Модель
public function books()
{
return $this->hasMany(Book::class);
}
И вам не нужна функция edit()
в вашем хранилище, просто detail()
(или имя, которое вы хотите), которые возвращают объект Book с отношениями.
BookRepository
public function detail($id)
{
return Book::with([
'author',
'bookcase',
])
->find($id);
}
Затем в Controller , да, у вас есть функция редактирования, которая получает детали из хранилища и возвращает объект в представление редактирования.
/**
* @var BookRepository
*/
private $books;
public function __construct(BookRepository $books)
{
$this->books = $books;
}
public function edit($id)
{
$book = $this->books->detail($id);
return view('admin.books.edit', compact('book'));
}
Если в любом случае вы захотите также вернуть всех авторов и книжные шкафы, я думаю, что лучше создать репозиторий для каждого, так что вы также можете использовать их из других контроллеров или классов.
AuthorRepository
public function getAll()
{
return Author::all();
}
BookcaseRepository
public function getAll()
{
return Bookcase::all();
}
Затем в Контроллере
/**
* @var BookRepository
*/
private $books;
/**
* @var AuthorRepository
*/
private $authors;
/**
* @var BookcaseRepository
*/
private $bookcases;
public function __construct(BookRepository $books, AuthorRepository $authors, BookcaseRepository $bookcases)
{
$this->books = $books;
$this->authors = $authors;
$this->bookscases = $bookcases;
}
public function edit($id)
{
$book = $this->books->detail($id);
$authors = $this->authors->getAll();
$bookcases = $this->bookcases->getAll();
return view('admin.books.edit', compact('book', 'authors', 'bookcases'));
}