Login to bookmark this video
Buy Access to Course
14.

Entidad Droide para la Relación Muchos a Muchos

|

Share this awesome video!

|

Keep on Learning!

With a Subscription, click any sentence in the script to jump to that part of the video!

Login Subscribe

Ya hemos probado bien los tipos de relación. Hemos vistoManyToOne y OneToMany, que en realidad son el mismo tipo de relación, visto desde lados diferentes. Así que, en realidad, hasta ahora sólo hemos explorado un tipo de relación: ManyToOne.

¿Qué hay de esa relación OneToOne de la que tal vez hayas oído hablar? Pues... ¡sorpresa! No es más que un ManyToOne disfrazado: la base de datos se parece a un ManyToOne, salvo que tiene una restricción única en la clave externa para asegurarse de que cada lado de la relación sólo puede referirse a un elemento.

La cuestión es que ManyToOne OneToMany , y OneToOne son todos, efectivamente, del mismo tipo de relación.

Entra en los droides

Bien, hablemos de reparación espacial. Para nosotros, los humanos, es un trabajo peligroso: el vacío del espacio, el frío, la falta de oxígeno, las lluvias ocasionales de asteroides y el vacío infinito. Eso sin mencionar cuando Bob se olvidó de asegurar su arnés y se fue flotando hacia su propia frontera final. Tardaron horas en encontrarle. Nunca volvió a ser el mismo después de aquello.

Entonces, ¿quién mejor para abordar esto que nuestros fieles droides?

Diriges un ejército de droides, cada uno está asignado a varias naves estelares y cada nave estelar tiene varios droides. Aquí es donde entra en juego el segundo y último tipo de relación: ManyToMany.

Para preparar el escenario, necesitamos una entidad Droid. A estas alturas, ya sabes lo que hay que hacer:

symfony console make:entity Droid

Y así de fácil, ya estamos en marcha. Esto sólo necesita unas pocas propiedades:name y primaryFunction. Con las predeterminadas bastará. Eso es todo, muy fácil.

Pero el trabajo de un desarrollador nunca termina. Como somos desarrolladores eficientes, no vagos, copia el comando para generar la migración y ejecútalo:

symfony console make:migration

Echa un vistazo. Aquí no hay sorpresas. Entonces... ejecútalo:

symfony console doctrine:migrations:migrate

Y... tenemos una nueva y reluciente tabla droid en la base de datos. Todavía no está relacionada con ship, pero bueno, toda relación tiene que empezar por algún sitio.

Poblar el universo con droides

Antes de poner esto en marcha, ¡vamos a fabricar algunos droides! Ejecuta:

symfony console make:factory Droid

Abre src/Factory/DroidFactory.php. Ya está listo, pero les falta personalidad. Sustituiré la matriz por datos más interesantes:

58 lines | src/Factory/DroidFactory.php
// ... lines 1 - 10
final class DroidFactory extends PersistentProxyObjectFactory
{
// ... lines 13 - 26
/**
* @see https://symfony.com/bundles/ZenstruckFoundryBundle/current/index.html#model-factories
*
* @todo add your default values here
*/
protected function defaults(): array|callable
{
return [
'name' => self::faker()->randomElement([
'R2-D2', 'C-3PO', 'BB-8', 'ZZZ-123',
]),
'primaryFunction' => self::faker()->randomElement([
'astromech',
'protocol',
'astromech',
'assassin',
'sleeper',
]),
];
}
// ... lines 47 - 56
}

Note

Para que esto funcione, actualiza también AppFixtures para incluir`php DroidFactory::createMany(100)

Lo haremos un poco más tarde. Recarga los accesorios con:

symfony console doctrine:fixtures:load

¡Y ahí lo tienes! Una tabla droid llena hasta los topes de droides dispuestos a ayudar y no a morir en el solitario vacío del espacio. Pero todavía no se puede asignar un droide a una nave. Cambiemos eso con nuestro último tipo de relación: ManyToMany.