我一直试图找出通过外键从记录中获取所有数据的正确方法。我有一个简单的应用程序,用户可以将书籍添加到他们的“书架”。
以下是我的表格:
用户
ID | NAME |
图书
ID | PAGES | NUMBER_OF_CHAPTERS
BOOKSHELF
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`)
在我的Eloquent模型中,bookshelf
有很多书,bookshelf_books
属于bookshelf
,我已经在我的模型中设置了这些。
用户创建“书架”并从书籍列表中添加书籍会发生什么。
我正处于需要使用用户书籍呈现书架的位置。
当我通过像Bookshelf :: find($ id) - >书籍这样的书籍检索我的书架书籍时,属于该书架的书籍会很好地返回...但只有书架表中的列。所以我得到了书架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中更进一步“加入”。
非常喜欢这个,谢谢!!
答案 0 :(得分:19)
Just eager load the relationship
更改
Bookshelf::find($id)->books
到
Bookshelf::with('books')->find($id)->books
答案 1 :(得分:3)
如何手动完成,并构建自己的阵列。
$bookshelf = Bookshelf::find($id)->books;
$thebooks = array();
foreach($bookshelf as $val){
$book = Book::find($val->book_id);
$thebooks[] = $book;
}
然后只需将$thebooks
返回到视图。这将是一系列书籍模型。
答案 2 :(得分:2)
你所拥有的应该是正确的。
$bookshelf = Bookshelf::find($id)->books;
要获得你的书,你会创建一个循环......
@foreach($bookshelf->books as $book)
{{ $book->name }}
{{ $book->title }}
@endforeach
为了更进一步,如果你有一个作者模型,你的书将belongTo()
,你甚至可以做类似的事情。
@foreach($bookshelf->books as $book)
{{ $book->name }}
{{ $book->title }}
{{ $book->author->name }}
@endforeach
答案 3 :(得分:0)
尝试此查询
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"
答案 4 :(得分:-1)
SELECT *
FROM BOOKSHELF_BOOKS
JOIN BOOKSHELF ON BOOKSHELF_BOOKS.BOOKSHELF_ID = BOOKSHELF.ID
JOIN USERS.ID = BOOKSHELF.USER_ID
试试这个sql语句,它会起作用。