web-dev-qa-db-ja.com

laravelの外部キーでレコードの完全なデータを取得する方法

私は外部キーを介してレコードからすべてのデータを取得する適切な方法を理解しようとしています。ユーザーが「本棚」に本を追加できるシンプルなアプリがあります。

これが私のテーブルです:

[〜#〜]ユーザー[〜#〜]

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`)

私の雄弁モデルでは、bookshelf hasMany本とbookshelf_books belongsTo a bookshelfそして私はモデルにそれらを設定しました。

何が起こるかは、ユーザーが「本棚」を作成し、本のリストからそれに本を追加することです。

ユーザーの本で本棚をレンダリングする必要があるところです。

Bookshelf :: find($ id)-> booksのような呼び出しで本棚の本を取得すると、その本棚に属する本は正常に返されますが、本棚テーブルの列のみが返されます。そのため、本棚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でこの「結合」をさらに一歩進める方法を理解しようと、一日中頭を悩ませてきました。

これでどんな助けも大好きです、ありがとう!!

16
user2551866

関係を熱心にロードするだけ

変化する

Bookshelf::find($id)->books

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

手動で行って、独自のアレイを構築するのはどうでしょう。

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

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

次に、$thebooksをビューに返します。本のモデルの配列になります。

3
Kylie

あなたが持っているものは正しいはずです。

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

本を入手するには、ループを作成します...

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

これをさらに進めるために、もしあなたの本がbelongTo()であるAuthorモデルを持っているなら、あなたは次のようなことさえできます。

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

このクエリを試してください

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"
0
Raj Jagani