Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在laravel中通过外键检索记录的完整数据?_Php_Mysql_Laravel_Laravel 4_Eloquent - Fatal编程技术网

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,除了正常关系之外,我的模型关系中是否需要为此设置其他内容?