[英]How to retrieve full data of record by its foreign key in laravel?
我一直試圖找出通過外鍵從記錄中獲取所有數據的正確方法。 我有一個簡單的應用程序,用戶可以將書籍添加到他們的“書架”。
這是我的表格:
USERS
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`)
在我的Eloquent Models中, bookshelf
書籍和bookshelf_books
書籍屬於bookshelf
,我已經在我的模型中設置了這些bookshelf
。
用戶創建“書架”並從書籍列表中添加書籍會發生什么。
我正處於需要用用戶書籍渲染書架的地方。
當我通過像Bookshelf :: find($ id) - > books這樣的書籍來檢索我的書架書籍時,屬於該書架的書籍會很好地返回...但只有書架表中的列。 所以我得到了bookhelf id,用戶ID和book id。
當我查詢書架中的書籍時,我想要返回的是書本身的所有數據,而不僅僅是它的ID。 EG [{"book_id":1, "pages":364, "number_of_chapters":14},{"book_id":2, "pages":211, "number_of_chapters":9}]
。
我整天都在試圖弄清楚如何在Laravel / Eloquent ORM中更進一步“加入”。
希望對此有所幫助,謝謝!!
那么只需手動完成,並構建自己的數組。
$bookshelf = Bookshelf::find($id)->books;
$thebooks = array();
foreach($bookshelf as $val){
$book = Book::find($val->book_id);
$thebooks[] = $book;
}
然后只需將$thebooks
返回到View。 這將是一系列書籍模型。
你有什么應該是正確的。
$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
試試這個查詢
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"
SELECT *
FROM BOOKSHELF_BOOKS
JOIN BOOKSHELF ON BOOKSHELF_BOOKS.BOOKSHELF_ID = BOOKSHELF.ID
JOIN USERS.ID = BOOKSHELF.USER_ID
試試這個sql語句,它會起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.