Activa JavaScript para disfrutar de los vídeos de la Mediateca.
Doctrine relacionando clases - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
En los vídeos anteriores hemos estado viendo cómo manejar Doctrine con una sola tabla.
00:00:00
Este vídeo es más bien explicativo, más que desarrollar.
00:00:08
Vamos a utilizar el ejemplo que hemos seguido en clase y en este caso vamos a ver cómo vamos a relacionar las distintas clases.
00:00:11
Conocemos la clase usuario. La clase usuario, en este caso, ya sabemos que es una entidad.
00:00:21
es la tabla relacionada con una tabla que se llama el usuario
00:00:26
y vamos a generar un repositorio, una clase de repositorio
00:00:32
donde tendremos una serie de métodos que nos permitan acceder a la información.
00:00:34
Bueno, identificamos la clase de usuario de esta manera
00:00:39
y ahora vamos a ir al primer campo, el campo id.
00:00:42
No tiene mayor importancia, ya hemos visto en el ejemplo anterior
00:00:45
id es un id que es entero y que el valor es autogenerado.
00:00:48
a la columna nombre, que es una columna de tipo string, la columna nacido
00:00:53
que es de tipo string, ya veríamos que esto en otros casos sería de tipo fecha
00:00:58
pero de momento vamos a dejarla como string, ¿de acuerdo? que estamos trabajando con ese culite que no diferencia
00:01:02
mucho strings de fechas, y empezamos aquí
00:01:06
lo importante, vamos a definir una tabla
00:01:10
una tabla, una clase, sexo, aquí la tenemos por aquí, y vamos a decir
00:01:13
que muchos usuarios van a tener
00:01:17
un sexo, es decir, y podríamos decirlo al revés
00:01:22
un sexo lo pueden tener muchos usuarios, con lo cual sería una relación
00:01:26
desde aquí, desde el usuario de many to one, muchos a uno
00:01:29
lo primero que hay que decirle, estamos en usuario, y lo primero que hay que decirle
00:01:33
es con qué clase tiene relación
00:01:38
en este caso con sexo, después tenemos que decir exactamente lo que haríamos
00:01:42
en un join, en un select vulgar y corriente, el join lo hacemos
00:01:46
con la tabla sexo y la columna o campo con el que está referenciado es el campo id.
00:01:49
Bueno, hasta aquí es algo muy normal.
00:01:57
El otro caso que tenemos es deportes.
00:01:59
Un usuario va a practicar muchos deportes en general y un deporte va a ser practicado
00:02:02
por muchos usuarios, con lo cual nuestra relación en este caso es many to many.
00:02:08
La entidad con la que vamos a tener relaciones con deporte y la tabla que hace de enlace
00:02:13
entre usuarios y deportes, pues lo llamamos de esta manera, usuario-deporte.
00:02:18
Bueno, aquí ya tenemos no solamente cómo enlazamos hacia allá, es decir, con nuestro
00:02:24
identificador de usuario referenciamos a y d, sino también cuál es la relación inversa.
00:02:29
Entonces, con id de deporte relacionamos con su id, ¿de acuerdo? Tenemos las dos,
00:02:36
tanto el join hacia adelante como el join en la otra parte de la relación.
00:02:41
Y aquí tendríamos deportes. Voy a continuar porque lo único importante aquí es esto de aquí. Para las relaciones de tipo many to many nos hace falta que creemos una estructura que se llama de tipo array collection para que nos guarde para cada usuario todos los objetos de deporte que practica. ¿De acuerdo? Y esto hay que crearlo siempre que tengamos una relación many to many. También en los casos one to many. ¿De acuerdo?
00:02:46
Bueno, lo demás exactamente igual. Aquí tenemos los getes y aquí los setes.
00:03:16
Por aquí abajo asoma el repositorio, del cual hablaremos en otra ocasión.
00:03:22
Vamos a ir a sexo, a ver qué tenemos en sexo.
00:03:26
En sexo tenemos exactamente la definición de sexo.
00:03:30
No hay nada nuevo aquí, nada, absolutamente nada nuevo como se puede ver.
00:03:34
¿Vale?
00:03:39
Estábamos, recordamos que de usuario era una relación many to one, con lo cual este no tiene ninguna relación.
00:03:40
Sin embargo, en deporte tenemos la definición normal de los campos que tiene y tampoco tenemos en este caso ninguna relación.
00:03:46
Ya veremos que de esta manera, aunque sea many to many, vamos a actuar como si fuera many to one, ¿de acuerdo?
00:03:58
Pero bueno, eso ya lo veremos posteriormente.
00:04:04
Si quisiéramos que realmente fuera many to many y esta tabla, esta clase, alojara también los objetos que practican un deporte concreto,
00:04:07
tendríamos que incluir aquí el equivalente al que hemos visto en usuarios
00:04:16
poniendo aquí private que usuarios son
00:04:20
y definiendo aquí las características correspondientes
00:04:24
para relacionar esta entidad con la entidad usuaria
00:04:28
bueno, con esto nos quedamos de momento
00:04:32
voy a dejarlo como estaba
00:04:35
y esta es la explicación de los campos que se manejan hacia el otro lado
00:04:36
¿cómo funciona esto?
00:04:43
Bueno, ¿cómo funciona esto? Pues es muy simple. En el caso de usuario hemos creado un pequeño repositorio en el cual algunos métodos que utilizamos en nuestra aplicación, pues hemos puesto aquí su equivalente. Esto no nos hubiera hecho falta, podríamos haber directamente hecho esto, pero queda bien.
00:04:45
El repositorio usuario extiende el repositorio de entidades en general y lo que estamos haciendo aquí es decirle que cuando leemos a un usuario que tiene, o estamos buscando un usuario que tiene un identificador, vamos a llamar a gestor de entidades y vamos a buscar el usuario ese identificador.
00:05:03
Si queremos buscar todos, pues en este caso los quiero además ordenados por el nombre, pues seleccionamos todos los objetos de ese usuario, de los usuarios que hay, los ordenamos por nombre y obtenemos el resultado.
00:05:21
¿De acuerdo? Esto es una manera de hacerlo. Si vamos al sexo, que también hemos incluido esto para trabajar con lo que había, tenemos nuestro read igual, nuestro read all igual y además tenemos un read indexed que nos va a servir para después mostrar, ven aquí, options y la posición es el id y el valor el nombre, con lo cual esto nos va a servir después para los campos de tipo option o similares.
00:05:37
y en deporte
00:06:03
idendeide
00:06:04
¿de acuerdo? esto es lo que vamos a tener
00:06:06
con todo esto
00:06:08
y ya sabiendo esa estructura
00:06:10
es verdad que vamos a ahorrar bastante trabajo
00:06:12
a la hora
00:06:14
de manejar nuestra librería
00:06:15
en nuestro controlador
00:06:18
se mantiene siendo un controlador muy sencillo
00:06:19
y en nuestra librería
00:06:22
en la que realmente maneja
00:06:23
todo lo que tenemos que hacer
00:06:25
pues ya vemos que por ejemplo
00:06:28
añadir una opción, pues va a ser crear usuario
00:06:30
hacer los sets correspondientes para darle su valor
00:06:32
añadir los deportes
00:06:35
y ya finalmente, pues, simplemente hacer persistir al usuario y añadir
00:06:38
modificar, pues, id de id
00:06:43
simplemente, esta línea nos sobraría
00:06:46
incluso, simplemente, haciendo el flush
00:06:48
y en eliminar, pues, lo remolramos y ya está
00:06:51
en el read, pues, leemos con el identificador
00:06:56
y en el reader exactamente como aparece aquí
00:07:00
recuerdo que estos readers los hemos hecho
00:07:04
que realmente lo que están haciendo es llamarnos
00:07:06
llamarnos, en este caso el DAO
00:07:08
está llamando al repositorio
00:07:11
por eso es muy interesante
00:07:14
es muy interesante
00:07:15
esto, este repositorio
00:07:16
donde llamamos directamente a estos métodos
00:07:19
de tal manera que entre el programa que hicimos anteriormente
00:07:22
y este programa pues no hay grandes diferencias
00:07:24
si lo programamos desde cero a lo mejor
00:07:27
hay cosas de aquí que hubiéramos eliminado
00:07:29
bueno, espero que haya aclarado
00:07:31
esta cuestión y ya por último
00:07:34
simplemente decirles que en Doctrine
00:07:36
en el manual, en la documentación
00:07:38
pues aparecen todas las posibilidades
00:07:40
que ofrece esto y que realmente
00:07:42
va a ser a medida que nos vaya haciendo falta
00:07:44
cuando nos vayamos a buscar
00:07:46
pues
00:07:47
cómo podemos obtener un tipo de información
00:07:49
u otra, pero que el mecanismo
00:07:52
es bastante fácil, bastante fácil
00:07:54
y bastante simple, y que cuando hacemos
00:07:56
una aplicación que se atiene primero a ORM
00:07:58
y además utiliza el patrón modelo vista controlador, pues
00:08:02
realmente tenemos una aplicación que es fácil de mantener y fácil de irla generando
00:08:06
a pesar de que a lo mejor en el inicio haya que establecer demasiadas cosas
00:08:10
pero después lo vamos a rentabilizar rápidamente
00:08:13
y eso es todo el vídeo, muchas gracias
00:08:17
- Idioma/s:
- Autor/es:
- Amadeo Mora
- Subido por:
- Amadeo M.
- Licencia:
- Dominio público
- Visualizaciones:
- 93
- Fecha:
- 10 de noviembre de 2020 - 17:43
- Visibilidad:
- Público
- Centro:
- IES CLARA DEL REY
- Duración:
- 08′ 25″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1364x768 píxeles
- Tamaño:
- 38.48 MBytes