tablas llaves llave foreign foraneas foranea crear consultas con clave php mysql laravel laravel-4 eloquent

php - llaves - ¿Cómo recuperar datos completos de registro por su clave externa en laravel?



laravel tablas (5)

¿Qué tal si lo haces manualmente y construyes tu propia matriz?

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

Luego simplemente devuelva $thebooks a la Vista. Que será una serie de modelos de libros.

He estado tratando de encontrar la manera correcta de obtener todos los datos de un registro a través de una clave externa. Tengo una aplicación sencilla donde los usuarios pueden agregar libros a su "estantería".

Aquí están mis tablas:

Los usuarios

ID | NAME |

LIBROS

ID | PAGES | NUMBER_OF_CHAPTERS

ESTANTE PARA LIBROS

ID | USER_ID (foreign key to `users.id`) |

LIBRO DE LIBROS

ID | BOOKSHELF_ID (foreign key to `bookshelf.id`) | BOOKS_ID (foreign key to `books.id`)

En mis modelos elocuentes, una bookshelf muchos libros y bookshelf_books pertenece a una bookshelf y los he configurado en mis modelos.

Lo que sucede es que los usuarios crean una "estantería" y le agregan libros de la lista de libros.

Estoy en el punto en el que necesito renderizar la estantería con los libros del usuario.

Cuando recupero mis libros de estantería con una llamada como Bookshelf :: find ($ id) -> libros, los libros que pertenecen a esa estantería regresan bien ... pero solo columnas de la tabla de estantería. Así que obtengo a cambio el ID de estantería, el ID de usuario y el ID de libro.

Lo que quiero devolver son todos los datos del libro cuando busco libros en la estantería, no solo su id. EG [{"book_id":1, "pages":364, "number_of_chapters":14},{"book_id":2, "pages":211, "number_of_chapters":9}] .

Me he estado rascando la cabeza todo el día tratando de descubrir cómo llevar esta "unión" un paso más allá en Laravel / Eloquent ORM.

Me encantaría cualquier ayuda con esto, gracias !!


Lo que tienes debe ser correcto.

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

Para obtener tus libros, crearías un bucle ...

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

Para llevar esto más lejos, si tuviera un modelo de Autor al que belongTo() sus libros belongTo() , incluso podría hacer algo como ...

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


Prueba esta consulta

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"



SELECT * FROM BOOKSHELF_BOOKS JOIN BOOKSHELF ON BOOKSHELF_BOOKS.BOOKSHELF_ID = BOOKSHELF.ID JOIN USERS.ID = BOOKSHELF.USER_ID

Intente esta declaración SQL, funcionará.