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

时间:2013-07-26 05:38:49

标签: php mysql laravel laravel-4 eloquent

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

以下是我的表格:

用户

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中更进一步“加入”。

非常喜欢这个,谢谢!!

5 个答案:

答案 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语句,它会起作用。