2013-07-26 55 views
16

我一直在想出通過外鍵從記錄中獲取所有數據的正確方法。我有一個簡單的應用程序,用戶可以將書籍添加到他們的「書架」。如何通過laravel中的外鍵檢索記錄的完整數據?

這裏是我的表:

USERS

ID | NAME | 

BOOKS

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屬於關聯一個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 /能言善辯ORM這個「加入」了一步。

很想任何解決這個問題,謝謝!

+1

這應該工作: 'DB ::表( '圖書') - >選擇( 'BOOKS.ID', 'BOOKS.PAGES', 'BOOKS.NUMBER_OF_CHAPTERS') - >加入( 'BOOKSHELF_BOOKS', ''BOOKS.ID','=','BOOKSHELF_BOOKS.BOOKS_ID') - > join('bookshelf','BOOKSHELF_BOOKS.BOOKSHELF_ID','=','BOOKSHELF.ID') - > where('bookshelf.user_id ','=',$ id_user) - > get();' –

+0

是的,這工作,很好的工作阿爾伯特。我不禁想到,用laravel的ORM必須有一個更清晰的方法,雖然也許是一廂情願的想法 – user2551866

+0

我不能試試它,但: '$ books = Book :: join('BOOKSHELF_BOOKS','BOOKS.ID ','=','BOOKSHELF_BOOKS.BOOKS_ID') - > join(.... //其餘連接' –

回答

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" 
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 
-1
SELECT * 
FROM BOOKSHELF_BOOKS 
JOIN BOOKSHELF ON BOOKSHELF_BOOKS.BOOKSHELF_ID = BOOKSHELF.ID 
JOIN USERS.ID = BOOKSHELF.USER_ID 

試試這個SQL語句,它會工作。

2

只是手動做,並建立自己的陣列。

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

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

然後只要將$thebooks返回到視圖。這將是一系列書籍模型。

相關問題