Relaciones con eloquent
Clase 20 de 25 • Curso de PHP con Laravel
Contenido del curso
Clase 20 de 25 • Curso de PHP con Laravel
Contenido del curso
Danilo Pazos
Moisés Cedeño
Ivan Mendez
Carlos Andres Castañeda Osorio
Enrique Garcia Stave
Jimmy Buriticá Londoño
ARiel Fernández Zarza
Mariana Valencia Gallego
Jimmy Buriticá Londoño
Carlos Nitsuga Hernández
Angel Enrique Barrios
Eduardo Rahn
Jhonathan Alfonso
Alfonso Navarro
Rodolfo Isaac Valtierra Domínguez
Alfonso Navarro
Juan Murillo
Gabriel Quevedo
Manuel Ojeda
Jhonathan Alfonso
Paul Cortes
Kenneth Angulo L
Carlos Eduardo Gomez García
Oney Ortiz Roman
Jordi Malla
Fredy Silva O.
Joseph Alexander Whacheng Barreto
Osmell Caicedo
Fernando Mejia
Enrique Garcia Stave
José Jesús Quilarque
Albert Pacheco Ospitia
Gastón Berruet
Germán QL
Harold David Molina Figueroa
Germán QL
Wilfredo Perilla
Kevin Ochoa Xopa
Contamos con más relaciones:
1 a 1 ---> $this->hasOne('App\Model'); 1 a M ---> $this->hasMany('App\Model'); M a 1 ---> $this->belongsToMany('App\Model'); M a M ---> $this->belongsToMany('App\Model');
Es importante resaltar que si mi tabla tiene un código de id que rompe la convención las podemos resaltar de la siguiente forma $this->hasMany('App\Model', 'key_principal', 'key_referencia');
También pueden revisar la documentación
¡Excelente! Gracias
excelente gracias <3
Como buena práctica al tratarse de base de datos, además de crear el campo referenciado "expense_report_id" se debe crear la llave foránea, esto se encuentra especificado en la Documentación oficial de Laravel. Para el caso del ejemplo sería agregar la siguiente línea:
$table->foreign('expense_report_id')->references('id')->on('expense_reports');
Buen dato amigo!
Muy buen dato.
Gente, favor revisar. Clase fundamental en relaciones en eloquent pero no se ve nada del código mientras se explica.
Ya está arreglado 😃 muchas gracias por reportar.
Las tablas se ++deben de relacionar++ y la forma de hacerlo es con el comando:
$table->foreign('expense_report_id')->references('id')->on('expense_reports');
El método completo para hacer la migración queda así:
public function up() { Schema::create('expenses', function (Blueprint $table) { $table->id(); $table->unsignedBigInteger('expense_report_id'); $table->text('description'); $table->decimal('amount'); $table->timestamps(); $table->foreign('expense_report_id')->references('id')->on('expense_reports'); }); }
Si llegan a tener algún error, es probable que los dos campos que se van a relacionar no tengan el mismo tipo de dato.
Vi este pedazo de código en la documentación pero no logro entenderlo al 100, que es lo que hace (constrained()
Schema::table('posts', function (Blueprint $table) { $table->foreignId('user_id')->constrained(); });
)
me perdi con la magia :S
Como recomendación para el que esta viendo el curso hoy que ya estamos en la version 7x de Laravel es que vean la documentación oficial y sigan las convenciones.
Usen el video como apoyo para entender lo que esta pasando.
Asi es bro, el curso esta un poco descontextualizado.
Minuto 12:45 tips importante para el tema de las relaciones en la base de datos, creo q lo informa asi como de pason, pero creeria q debio haber hecho mas enfasis sobre ese detalle el cual es muy importante.
Creo que se pudo explicar mejor, eloquent tiene diferentes formas de hacer lo mismo
Buenos despues de cacharear en un proyecto personal, al momento de intentar la relacion hasMany no me daba resultados, claro especifico era lo hacia en un proyecto personal, con tablas diferentes. Los errores q me salian era por los diferentes motivos.
Les recomiendo leer este link a la documentacion donde explicar como crear las tablas.
si la tabla se llama user seria user_id ?
Si quisiera migrar una base de datos que ya tengo creada con sus relaciones ya hechas y todo..
Cómo puedo migrarla de forma masiva a laravel? *Quedando con la consistencia que el profesor explica^
Tienes dos opciones:
php artisan migrate: refresh --seeder
Esto si tienes seeders.
Excelente las relaciones como se hacen en los modelos de PHP para obtener sus datos
Chekense estas funciones para mostrar los modelos con artisan, te muestra un pequeno resumen y las relacionaes !! Que maravilla !! 🧐
Cuando defines la relación en las migraciones, lo que estás haciendo es crear esa relación en la base de datos para que la misma base de datos tenga conocimiento de ella, pero esto Laravel no lo sabe, es por eso que se necesita definir las relaciones en los modelos también, es ahí donde Laravel sabe qué modelo se relaciona con cual.
Y lo interesante de esto es que ya te trae todo relacionado en forma de listas, y es mucho más cómodo a la hora de trabajar
Por alguna razón no se porque me aparece como Null
App\Expense::first(); => App\Expense {#3000 id: 1, expense_report_id: 3, description: "Transporte", amount: "100.00", created_at: null, updated_at: null, } App\Expense::first()->expenseReport; => null App\Expense::first()->expenseReport; => null
Alguien sabe porque pasa eso
Tengo el mismo problema, lo has podido resolver?
Gracias
Amigo, Para que no te cree los campos created_at y updated_at debes crear un nuevo objeto esto con eloquent y después hacer un save del objeto.
$expense = new App\Expense; $expense->expense_report_id = 3; $expense->description = "Transporte"; $expense->amount = 100; $expense->save();
Hola, puedes consultar en la documentación Foreign keys
Eloquent no las relaciona pero dentro del modelo podes usar metodos como hasMany() o BelongsTo() para decirle a las tablas en las migraciones que tienen relaciones y ya en las migraciones tambien debieramos de enviar un $table->usignedInteger('llaveforanea_id'); $table->foreign('llaveforanea_id')->references('id')->on('nombre de la tabla') //si no usas id como el standar entonces mandas como parametro en references el nombre de la columna
Apuntes: Al trabajar con bases de datos, normalmente establecemos relaciones, lo que proporciona integridad y nos permite llamar a referencias entre entidades. Para establecer una entidad en una base de datos, escribimos en la consola 'php artisan make:model -help' Dentro de las opciones que nos ofrece el comando, esta el de crear una nueva migracion al momento (-m es lo mismo que --migration), para ello escribimos:
Excelente comentario.
Si deseamos profundizar sobre las relaciones en los Modelos les recomiendo investigar solo los conceptos Eager Loading / Lazy Loading.
Genial!
No entiendo porqué se llama solamente con first()->expenses y no first()->expenses()
Hola, eso se debe a que al momento de crear la relación expenses si bien es una función del modelo se convierte en un atributo para el Eloquent de Laravel
O vaya, sí, ya vi la documentación, por las propiedades dinámicas... Gracias @haroruhomer
¿Donde puedo aprender sobre Consultas avanzadas con Eloquent o su ORM, como sub consultas, consultas anidadas, etc????