16

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

这是我的表:

用户

ID   |   NAME   | 

图书

ID   |   PAGES   |   NUMBER_OF_CHAPTERS

书架

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

书架_书

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

在我的 Eloquent 模型中,a bookshelfhasMany books 和bookshelf_booksbelongsTo abookshelf我已经在我的模型中设置了这些。

发生的情况是用户创建一个“书架”并从书籍列表中添加书籍。

我正处于需要用用户的书籍渲染书架的地步。

当我通过像 Bookshelf::find($id)->books 这样的调用检索我的书架书籍时,属于该书架的书籍返回得很好......但只有书架表中的列。因此,我得到了书架 ID、用户 ID 和书籍 ID。

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

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

希望有任何帮助,谢谢!

4

5 回答 5

21

只是急切地加载关系

改变

Bookshelf::find($id)->books

Bookshelf::with('books')->find($id)->books
于 2013-07-29T07:41:13.083 回答
3

仅手动执行并构建自己的阵列怎么样。

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

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

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

于 2013-08-04T18:27:54.883 回答
2

你所拥有的应该是正确的。

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

为了得到你的书,你会创建一个循环......

@foreach($bookshelf->books as $book)
   {{ $book->name }}
   {{ $book->title }}
@endforeach

更进一步,如果你有一个 Author 模型,你的书会这样belongTo(),你甚至可以做类似的事情。

@foreach($bookshelf->books as $book)
   {{ $book->name }}
   {{ $book->title }}
   {{ $book->author->name }}
@endforeach
于 2013-07-26T12:18:50.760 回答
-1

试试这个查询

SELECT b.id, b.pages, b.number_of_chapters 
FROM bookshelf bs 
JOIN bookshelf_books bsb ON bsb.bookshelf_id = bs.id 
JOIN books b ON b.id = bsb.books_id 
WHERE bs.id = "Id of bookshelf"
于 2013-07-26T06:08:47.067 回答
-3
SELECT * 
FROM BOOKSHELF_BOOKS 
JOIN BOOKSHELF ON BOOKSHELF_BOOKS.BOOKSHELF_ID = BOOKSHELF.ID 
JOIN USERS.ID = BOOKSHELF.USER_ID

试试这个 sql 语句,它会工作。

于 2013-08-04T12:03:41.643 回答