簡體   English   中英

如何通過laravel中的外鍵檢索記錄的完整數據?

[英]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::find($id)->books

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

那么只需手動完成,並構建自己的數組。

  $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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM