Laravel y Base de Datos

Entorno de trabajo y repaso de Laravel

1

Qué aprenderás sobre Laravel Avanzado

2

Repaso de Laravel y requisitos del curso

3

Configuración de la base de datos-SQLite en Laravel

4

Instalación, configuración y uso de Homestead

5

Instalar Laravel Sanctum

6

API de autenticación: laravel UI y laravel sanctum

Manejo de tu base de datos con Laravel

7

Capa de transformación con API Resources

8

Manejo de relaciones en bases de datos con Laravel

9

Relaciones Polimórficas en Eloquent

La terminal de Laravel

10

Cómo crear comandos para la terminal de Laravel

11

Ejecutando comandos desde la API

12

Programación de tareas

Eventos y tareas de Laravel

13

Eventos y Listeners en Laravel

14

Eventos de Eloquent

15

Introducción al uso de Queues y Jobs

16

Cómo disparar eventos en Queues

17

Laravel Horizon

Manejo de errores

18

Cómo capturar y leer errores con la clase Handler

19

Excepciones personalizadas

20

Excepciones HTTP personalizadas y debugging con Laravel Telescope

21

Configuración de logs y channels en Laravel

El corazón de Laravel

22

Ciclo de vida de una aplicación en Laravel

23

¿Qué son los service containers?

24

¿Cómo funciona un service container?

25

Registro y carga de clases con service providers

Creación de paquetes

26

¿Cómo crear mis propios paquetes de Laravel?

27

Propiedades para manejo de dependencias

28

Comprende el archivo composer.json

29

Extendiendo composer.json, autocarga de clases y PSR-4

30

Crear mis propios Services Providers

31

Publicación de archivos

32

Uso de repositorios locales

33

Publicación de paquetes en packagist

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Convierte tus certificados en títulos universitarios en USA

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

19 Días
4 Hrs
26 Min
16 Seg

Relaciones Polimórficas en Eloquent

9/33
Recursos

Aportes 33

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Esta clase si me decepcionó, no tiene una buena explicación y es mucho código sin sentido.

Dejo el repositorio del proyecto con Laravel 8:

https://github.com/RetaxMaster/platzi-api/commit/b0efbf712f5b2580a758fe25a8b6cfb09440d385

Ok, voy a intentar dar mi explicación de lo que está pasando en esta clase, es importante tener en cuenta que se establecerá una relación polimorfa muchos a muchos (MaM) por lo que tienen que tener nociones de la relación MaM, para entender las relaciones polimorfa les dejó el siguiente video que encontré dentro de los aportes de esta clase y utiliza un ejemplo de relaciones polimorfas uno a muchos: relaciones polimorfas uno a muchos.
.
Primera parte - Relación a establecer
Primero que nada hay que entender que es lo que vamos a relacionar a nivel de base de datos, esto es una entidad que pueda calificar (un usuario, un invitado, una sesión, etc) con una entidad que pueda ser calificada (producto, categoría, etc.), como muchos usuarios podrían calificar muchos productos y muchos productos podrían ser calificados por muchos usuarios vemos que se forma una relación MaM, según teoría de bases de datos relacionales, esta relación se puede alcanzar mediante tres tablas - una tabla usuarios, una tabla productos y una tabla intermedia o pivote ratings.
.
Segunda parte - Migración de tabla Ratings
Esta tabla tendrá 5 columnas importantes, el score, rateable_type, rateable_id, qualifier_type y qualifier_id, los últimos cuatro pueden inferirse por las instrucciones $table->morphs('rateable') y $table->morphs('qualifier'). Así que, ¿qué significan esas columnas?, bueno si vieron el video del inicio de mi comentario espero hayan entendido que se rateable_type y qualifier_type hacen referencia al modelo que recibe calificación y al modelo que dictó dicha calificación, respectivamente - y rateable_id/qualifier_id hacen referencia a el registro especifico dentro de la tabla de cada type que recibe/dicta la calificación.
.
Tercera parte - Modelo Rating
El modelo Rating extenderá de Pivot y no de Model puesto que como ya expliqué nuestra tabla es una de tipo intermedia o pivote, no se porqué se indica el uso de campos auto-incrementables (lo siento 😦), y se indica la tabla a la que nos relacionaremos. Después es como definir cualquier relación de Laravel, tenemos que indicar el nombre del método para acceder a la relación y retornar la relación polimorfa que no toma argumentos porque como puede relacionarse a varios Modelos la función MorphTo se encarga de determinarlo.
.
Cuarta parte - Previo al Trait Can Rate
Aquí es donde el titulo avanzado del curso toma sentido jeje, en un sistema diferente a este (llamemosle un sistema normal) lo que se haría sería establecer la otra parte de la relación polimorfa en los modelos específicos, por ejemplo en el caso del modelo User describiríamos la relación de la siguiente forma:

public function ratings()
{
	return $this->morphMany( 'App\Models\Rating', 'qualifier' );
}

lo cual le indicaría a Laravel como establecer la relación polimorfa desde Usuario con Rating. En un sistema como el del profe (llamemoslo un sistema avanzado) quisiéramos “volverlo más flexible” citando a Sergio, por lo que podemos tomar ventaja de los Traits para delegar la responsabilidad de establecer la otra parte de la relación polimorfa a una clase en especifico y así poder darle la posibilidad a cualquier clase que queramos de poder calificar, si quieren saber más acerca de que es, como hacer y como usar un Trait les dejo el siguiente enlace: Traits.
.
Quinta parte - Trait Can Rate
Bueno, ahora que entendemos un poco la motivación de porque se usará un Trait esta parte es la que más me costó jeje,el método ratings de la clase CanRate es lo que referí como la otra parte de la relación polimorfa ya que se encargará de relacionar el modelo que le pasen por parámetro dentro de la tabla ratings usando el qualifier_id y rateable_id como llaves foráneas para después retornar los ratings (con timestamps) donde el rateable_type sea el modelo objetivo y el qualifier_type sea el modelo que invoco la relación.
Bueno, ahora ¿Cómo invocaremos la relación? con el método rate del trait CanRate, lo que hace éste método es tomar dos parámetros, modelo y calificación, el primero hará referencia que modelo se va a calificar con el puntaje que se pasa en calificación, por lo que al momento de invocar la relación ratings del Trait CanRate podemos encadenar el método attach (más información del método attach) para básicamente indicar que se escriba en la tabla pivote el id que tenga el modelo relacionado al score ya antes mencionados.
.
espero haberles ayudado y no confundido más, jeje.

Si saben ingles este es una muy buena explicación de las relaciones polimórficas: https://www.youtube.com/watch?v=rx1DQBE01b0

Por más avanzado que sea un curso, a este le falta demasiada planeación, estructuración y enriquecimiento de conceptos del framework. Es importante resaltar que el profesor es bueno pero se nota que el TEAMPLATZI sacó este curso de afán.

A este curso le falta más amor.

Links al ejemplo mas sencillo de relaciones polimorficas: https://laravel.com/docs/7.x/eloquent-relationships#polymorphic-relationships

He hecho ya alguna vez de relaciones polimórficas de muchos a muchos y les aseguro que no es tan complejo, además, el profesor no sigue convenciones que recomienda laravel, y aunque no sea algo obligatorio es una línea que se sigue para no desorientar a muchas personas que vienen por esa línea. LA VERDAD MUY DECEPCIONANTE ESTE CURSO, EL DE API REST BASICO FUE MUCHO MAS INTERESANTE GRACIAS AL PROFESOR QUE SE ESMERÓ EN EXPLICAR DE FORMA CLARA

a este punto no sé si dejar el curso aquí e ir a tomar el de Eloquent y luego regresar … o continuar …

La verdad es que he tenido que arreglar muchos errores, por que el profesor se salta mucho código y recurrir a repositorios de los que ya han hecho este curso para entender bien… y este tema tan enredado que me dan ganas de dejar el curso hasta aqui…

que complejo me ha parecido

Excelente explicación! Creo que para poder entender esta clase, la audiencia debe tener conocimientos no solo de cómo usar la mágia de laravel, si no, POO y manajar muy bien las relaciones en laravel.

Muy mala Clase, empezó bien con la explicación, pero al parecer se había extendido mucho y le toco hacer copy-paste, lo malo es la falta de explicación de algunos de estos códigos.

a pesar de ser un curso Avanzado se debería de tomar el tiempo de poder explicar cada cosa que pone en el código.

Sobre el reto, > hacer que los usuarios se puedan calificar entre ellos:

El modelo user debe usar los dos traits creados:

class User extends Authenticatable
{
	use CanRate;
	use CanBeRated;

y he aqui un posible test para dicha funcionalidad:

	public function test_a_user_can_rate_another_user()
	{
		$user1 = User::factory()->create();
		$user2 = User::factory()->create();

		$user1->rate($user2, 10);

		$this->assertInstanceOf('Illuminate\Database\Eloquent\Collection', $user1->ratings(User::class)->get());
		$this->assertInstanceOf('Illuminate\Database\Eloquent\Collection', $user2->qualifiers(User::class)->get());
	}

para quienes tengan dificultades aca el profesor italo morales explica de forma sencilla https://www.youtube.com/watch?v=uT-2pB43vXM

Hola, si se encuentran algo desorientados les dejo el siguiente enlace que explica con un ejemplo sencillo qué es, como se crea y como usar un Trait en Laravel:

https://www.develodesign.co.uk/news/laravel-traits-what-are-traits-and-how-to-create-a-laravel-trait/

jaja es la primera vez que veo estas relaciones polimórficas en laravel se me complica mucho, pero esta muy interesante así que terminare aprendiendo y a dominar este tema si o si

esta clase daba para tres o cuatro videos 😕 al final no esta bien explicado por querer meter todo en un solo video

El problema que veo aqui es que no sigue las convenciones de laravel

Las relaciones polimorficas permite que un modelo se relacion a varios otrso modelos

jaja nunca me habia planteado un relación polimórfica!Gran dato, gracias!!

Despues de un ano estoy repitiendo este curso. El contenido tratado es **ORO PURO**, por eso vengo a consultarlo de nuevo. Y veo que si es necesario **tener bases solidas** para entender bien el ejercicio (independientemente de la version del framework)
ya veo porque este curso lo sacaron de la ruta backend de php, malo malo

En esta clase se habla de una relacion polimorfica muchos a muchos:
Un usuario -->> puede calificar varios productos.
Un producto -->> puede ser calificado por varios usuarios

Recomendacion, seguir la documentacion de laravel.

Rel polimorficas

Y entender primero como se hace la relacion polimormica muchos muchos, de manera simple como la documentacion indica, (en el ejercicio de la clase es raitings) y como hacer su relacion inversa (en la clase la relacion inversa seria qualifiers).

Despues de tener claridad en ese tema, ahora si introducir el uso de los traits para lograr una relacion que no solo sea aplicada entre usuarios y productos, sino que pueda ser extendida a sesiones y paginas o usuarios y categorias, etc.

Para una tabla pivot es mejor usar relaciones polimorficas y crear un treat que permita a las demas tablas relacionarse de manera sencilla y simple.

Esta clase no estuvo bien planeada. Hay muchas porciones de código sin explicación

Muy mal estructurada la clase, le falta mas aclaración del codigo el uso de los traits,etc.

La verdad hasta el momento no me he sentido cómodo y a gusto con este curso, hay demasiadas cosas inconclusas, la explicación no es muy buena. Al descargar ciertos elementos, generan error por falta de dependencias que no se comentaron, le falta estructura al curso.

Recomiendo estos dos videos en espanol para comprender las relaciones polimorficas:

Aqui se justifica el titulo curso avanzado, muy buen contenido.

Que tal chicos para todos aquellos que llegaron acá y no entienden nada…

1.- Al principio del curso se dijo que es importante que ya tengas experiencia con Laravel… razón por la cual supongo que el profe omite muchas cosas no lo justifico pero lo entiendo…

2.- Para entender esta clase primero hay que saber de los siguientes temas

A) Relaciones polimórficas  1 a 1,1 a N y N a N( que es la que se usa en esta clase)
B) Traits
C) Test 

Cuando yo tome este curso hace mas de 6 meses me frustre mucho, pero acababa de terminar el curso de introducción a Laravel y los recursos de Laravel disponibles aquí en Platzi, de echo considero que mas bien hizo falta entrar mas a detalle a todos los tipos de relaciones que soporta Laravel, la verdad es que el único ‘problema’ que encuentro de este video en particular es que puede ser complicado de entender incluso para alguien con experiencia, la ventaja es que reduce mucho el código, entonces es ahí donde uno debe tomar la decisión de usar Traits para este tipo de relaciones que reducen el código, o escribir mas código en los modelos involucrados que haría mas fácil de entender lo que esta pasando

Me he quedado al principio, después de acabar la migración ya no entendí nada xD

estas clases están retadoras (de entender a la primera)! 😖 … bueno, el curso es avanzado 🤔 … pensemos que está diseñado correctamente para retar a los estudiantes … 😬

No sé, pero creo yo que puede haber otra manera de usar las relaciones polimorficas para lograr el mismo objetivo.