Ultima Laravel
Share
Explore
Ejemplo tabla alumnos

icon picker
Ejemplo aula_online

image.png
Tabla cursos
Ahora creamos el Modelo para la tabla Cursos, con artisan escribimos la siguiente línea de código.
php artisan make:model Curso -m
image.png
Esto crea la migración de la tabla cursos y el modelo Curso
image.png
En el modelo Cursos
image.png
Iremos registrando las configuraciones de la tabla Cursos.
protected $table = "cursos";
protected $primaryKey = "id";
protected $fillable = ['nombre', 'nivel', 'horas_academicas', 'profesor_id'];
protected $hidden = [ 'id'];
image.png

Relaciones en las tablas de migraciones

En la tabla Cursos existen dos relaciones que debemos tomar en cuenta considerando nuestro modelo entidad-relación.

Relación uno a muchos

La relación existente entre la tabla profesores y la tabla cursos, es una relación de uno a muchos (o muchos a uno), es decir, un profesor puede dictar muchos cursos o un curso puede ser dictado por un solo profesor.
En la tabla cursos registramos el IDProfesor como llave foránea de la tabla profesores, esto creará una integridad referencial a nivel de la base de datos.
Si no tendríamos la migración haríamos ( en nuestro caso con la instrucción anterior crea el modelo y la migración)
El código de la migración
image.png
Vamos a modificar la tabla con los campos que queremos
Quedara
image.png
Esto daría error , ya que tenemos que tener la tabla de profesores en las migraciones antes
image.png
Vamos hacer la migración de la tabla de profesores, pero no lo vamos hacer a la vez que el modelo, ya que la tabla seria por convención de laravel profesors y no es lo que queremos
image.png
image.png
su código
image.png
y cambiamos datos
image.png
Si hacemos ala migración ahora seguirá dando error
image.png
Tenemos que cambiar el orden de las migraciones de profesores y cursos
image.png
Lo que hacemos cambiando números iniciales por ejemplo
image.png
si ahora volvemos hacer
image.png
lo hace sin errores y tenemos en la BD
image.png
Tenemos
image.png
Creamos el modelo Profesor
image.png
image.png
image.png
En este modelo es necesario protected $table = "profesores"; ya que no sigue la convención de laravel
Tabla Pivot
La relación entre la tabla alumnos y cursos es una relación muchos a muchos (Un alumno puede tomar varios cursos, un curso puede tener muchos alumnos).
De manera similar, En las migraciones se debe indicar esta relación (muchos a muchos), creando una tabla Pivot (tercera tabla), esto lo realizaremos en el mismo método up de la clase curso.
image.png
Si queremos volver hacia atrás la última migración realizada
y luego hacemos

Seeders

image.png
image.png
image.png
image.png

Cambiamos el Dataseeder
image.png
Seeder cursos
Hacemos lo mismo tabla cursos
image.png
image.png

image.png
Insertar datos en la tabla pivot Laravel
Finalmente la relación de la tablas Alumnos con Cursos que es una relación muchos a muchos, existen funciones que te ofrece Eloquent para llenar la tabla pívot, en nuestro caso la tabla es alumno_curso, el método que utilizaremos es attach().
En la misma clase CursoSeeder creamos la relación que existe entre Alumno y Curso.
image.png
En la misma variable $curso se puede referenciar a la tabla alumnos, gracias a la relación que se va a realizar en los modelos Alumno y Curso con el método belongsToMany; con el método attach() se envía el Id de un alumno en específico.
Por último realizamos la referencia de la clase Curso.
Cambiamos Dataseeder
image.png

Ejecutar Seeders

Antes hacemos las relaciones para que funcione

Relaciones en Eloquent

En tabla Profesores con la tabla Cursos, existe una relación muchos a uno (Un profesor puede dictar muchos cursos, un curso puede ser dictado por un solo profesor) .
Definir relaciones en los modelos
En el modelo Profesor utilizaremos el método hasMany que define la relación uno a muchos.

image.png
Para definir la inversa de una relación utilizaremos en el modelo Curso el método belongsTo que define la relación muchos a uno.
image.png
De igual forma, veremos la relación de la tabla Alumnos y Cursos; existe una relación muchos a muchos (Un alumno puede tomar varios cursos, un curso puede tener muchos alumnos), la relación muchos a muchos lo plasmamos en nuestro modelo.
En el modelo Alumno utilizaremos el método belongsToMany que define la relación, muchos a muchos.
image.png
Del mismo modo en el modelo Curso utilizamos el mismo método belongsToMany que define la relación muchos a muchos.
image.png

Ahora se ejecutamos los seeders
image.png
image.png
Este código lo primero que hará es eliminar todas las tablas de nuestra base de datos y seguidamente volverá a generar todas las tablas sin datos. Ahora ejecutamos la siguiente línea de código que llenará las tablas con datos.
image.png
Comprobamos en la BD
image.png
image.png
image.png
image.png
Tenemos la estructura de nuestra BD
image.png
image.png

Factories

Laravel cuenta con los Factories que es otro forma de llenar los datos de una forma más automatizada, y generar gran cantidad de datos.
Factory Profesor
image.png
Este comando creara un clase ProfesorFactory dentro de la carpeta database/factories, si exploramos el archivo vemos que hace referencia al Modelo Profesor.
image.png
llenamos de datos nuestro ProfesorFactory en el método definition() dentro de return definimos todos los campos de nuestra tabla profesores con sus respectivos tipos de valores.
image.png
Ahora para poder utilizar la clase ProfesorFactory, nos vamos a nuestro clase ProfesorSeeder, comentamos el código que anteriormente desarrollamos y escribimos lo siguiente:
image.png
Factory Alumno
Realizaremos los mismos pasos en la clase AlumnoFactory,
image.png
image.png
image.png
image.png

Factory Curso
Por último vemos la tabla cursos, como en los Seeders hay que prestarle atención a esta clase por las relaciones que tiene la tabla cursos con las tablas profesores y alumnos de la base de datos.
Crearemos la clase CursoFactory.
image.png
image.png
Igual que en los anteriores Factories llenamos los campos de la tabla cursos, aquí lo diferente es que se tiene que ver la relación que existe primero entre la tabla cursos con la tabla profesores.
image.png
Al momento de referenciar el campo profesor_id, voy a llamar al Modelo Profesor, recuperar todos los registros y por último aleatoriamente escoger un ID
Ahora iremos a la clase CursoSeeder, comentamos el código anterior, y escribimos la siguiente línea de código.
Esta línea de código primeramente creará 10 registros en la tabla cursos, seguidamente creará 40 registro en la tabla alumno, por último creará las relaciones en la tabla alumno_curso por cada curso estarán registrados cuatro alumnos.
image.png
DataSeeder
image.png

Ejecutar los Factories

Por último ejecutamos desde Artisan las migraciones y los seeders, con el fin de llenar de datos nuestra base de datos con los cambios realizados.
image.png
Ejecutamos los seeders.
image.png



Share
 
Want to print your doc?
This is not the way.
Try clicking the ⋯ next to your doc name or using a keyboard shortcut (
CtrlP
) instead.