Php 如何在laravel中通过外键检索记录的完整数据?
我一直在试图找到通过外键从记录中获取所有数据的正确方法。我有一个简单的应用程序,用户可以将书籍添加到他们的“书架” 这是我的桌子: 用户Php 如何在laravel中通过外键检索记录的完整数据?,php,mysql,laravel,laravel-4,eloquent,Php,Mysql,Laravel,Laravel 4,Eloquent,我一直在试图找到通过外键从记录中获取所有数据的正确方法。我有一个简单的应用程序,用户可以将书籍添加到他们的“书架” 这是我的桌子: 用户 ID | NAME | 书籍 ID | PAGES | NUMBER_OF_CHAPTERS ID | BOOKSHELF_ID (foreign key to `bookshelf.id`) | BOOKS_ID (foreign key to `books.id`) 书架 ID | USER_ID (
ID | NAME |
书籍
ID | PAGES | NUMBER_OF_CHAPTERS
ID | BOOKSHELF_ID (foreign key to `bookshelf.id`) | BOOKS_ID (foreign key to `books.id`)
书架
ID | USER_ID (foreign key to `users.id`) |
书架上的书籍
ID | PAGES | NUMBER_OF_CHAPTERS
ID | BOOKSHELF_ID (foreign key to `bookshelf.id`) | BOOKS_ID (foreign key to `books.id`)
在我雄辩的模型中,一个书架
有许多书,而书架上的书
属于书架
,我已经在我的模型中设置了这些书
用户创建一个“书架”并从图书列表中向其中添加图书
我现在需要在书架上渲染用户的书籍
当我用bookshelf::find($id)->books这样的调用检索书架上的书时,属于该书架的书会很好地返回..但只返回书架表中的列。所以我得到了书架id、用户id和图书id作为回报
当我查询书架上的书时,我想要返回的是书本身的所有数据,而不仅仅是它的id。例如,[{“book\u id”:1,“pages”:364,“number\u of_chapters”:14},{“book\u id”:2,“pages”:211,“number\u of_chapters”:9}
我一整天都在挠头,想弄明白如何在Laravel/雄辩的ORM中进一步“加入”
我很乐意帮忙,谢谢 试试这个查询
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"
你所拥有的应该是正确的
$bookshelf=bookshelf::find($id)->书籍代码>
要获取书籍,您需要创建一个循环
@foreach($bookshelf->books as $book)
{{ $book->name }}
{{ $book->title }}
@endforeach
更进一步说,如果你有一个作者模型,你的书将归属于()
,你甚至可以这样做
@foreach($bookshelf->books as $book)
{{ $book->name }}
{{ $book->title }}
{{ $book->author->name }}
@endforeach
改变
Bookshelf::find($id)->books
到
试试这个sql语句,它会工作的。手动执行,然后构建自己的数组怎么样
$bookshelf = Bookshelf::find($id)->books;
$thebooks = array();
foreach($bookshelf as $val){
$book = Book::find($val->book_id);
$thebooks[] = $book;
}
然后将$thebooks
返回到视图。这将是一个书籍模型数组。应该可以工作:DB::table('books')->select('books.ID','books.PAGES','books.NUMBER of theu CHAPTERS')->join('BOOKSHELF_books','books.ID','=','BOOKSHELF_books.books_ID')->join('BOOKSHELF','BOOKSHELF books_ID','=','BOOKSHELF books.ID')->其中('bookshelf.user_id','=',$id_user)->get();
是的,干得不错,阿尔伯特。我忍不住想,一定有一种更干净的方法可以用拉威尔的ORM来实现,也许是一厢情愿的想法,我不能尝试,但:$books=Book::join('bookshelf_books',books.id','=','bookshelf books.books_id')->join(....//其余的连接
Hi,除了正常关系之外,我的模型关系中是否需要为此设置其他内容?