如何在laravel中通过其外键检索记录的完整数据?

2022-08-31 00:59:46

我一直在努力找出通过外键从记录中获取所有数据的正确方法。我有一个简单的应用程序,用户可以将书籍添加到他们的“书架”中。

这是我的表格:

用户

ID   |   NAME   | 

ID   |   PAGES   |   NUMBER_OF_CHAPTERS

书架

ID   |   USER_ID (foreign key to `users.id`)   | 

BOOKSHELF_BOOKS

ID   |   BOOKSHELF_ID (foreign key to `bookshelf.id`)   | BOOKS_ID (foreign key to `books.id`)

在我的雄辩模型中,a has有很多书和属于a,我已经在我的模型中设置了这些。bookshelfbookshelf_booksbookshelf

用户会创建一个“书架”,并从图书列表中向其添加图书。

我正处于需要用用户书籍呈现书架的地步。

当我使用像 Bookshelf::find($id)->books 这样的调用来检索我的书架书籍时,属于该书架的书会返回正常。但只有书架表中的列。因此,我得到了书架ID,用户ID和书籍ID的回报。

我想返回的是当我在书架中查询书籍时书籍本身的所有数据,而不仅仅是id。[{"book_id":1, "pages":364, "number_of_chapters":14},{"book_id":2, "pages":211, "number_of_chapters":9}]

我整天都在挠头,试图弄清楚如何在Laravel/Eloquent ORM中更进一步地“加入”。

希望得到任何帮助,谢谢!!


答案 1

只是急于加载关系

改变

Bookshelf::find($id)->books

Bookshelf::with('books')->find($id)->books

答案 2

只需手动执行此操作并构建自己的阵列呢?

  $bookshelf = Bookshelf::find($id)->books;
  $thebooks = array();

  foreach($bookshelf as $val){
  $book = Book::find($val->book_id);
  $thebooks[] = $book;
  }

然后只需返回视图即可。这将是一系列书籍模型。$thebooks


推荐