1 00:00:00,430 --> 00:00:03,270 Bueno, es el momento de crear ya la propia aplicación. 2 00:00:04,150 --> 00:00:05,349 Nuestra aplicación es muy sencilla. 3 00:00:05,950 --> 00:00:08,410 Una relación entre departamentos y empleados. 4 00:00:09,230 --> 00:00:12,349 Si vemos su modelo de entidad-relación, sería algo como esto. 5 00:00:12,509 --> 00:00:17,589 Un empleado cuyo identificador es un IF, tiene un nombre y una fecha de nacimiento. 6 00:00:17,589 --> 00:00:21,870 Y un departamento con un identificador ficticio y un nombre. 7 00:00:21,870 --> 00:00:26,010 un departamento va a tener entre uno y el empleado o cero 8 00:00:26,010 --> 00:00:30,890 y un empleado pertenece a un único departamento 9 00:00:30,890 --> 00:00:32,130 un esquema bien simple 10 00:00:32,130 --> 00:00:34,530 bueno una vez que tenemos esto 11 00:00:34,530 --> 00:00:40,609 tenemos que irnos ya a ver que nos ofrece Symfony para hacer esto 12 00:00:40,609 --> 00:00:45,670 bueno podemos ya directamente decir php bin console 13 00:00:45,670 --> 00:00:50,789 si pulsamos aquí vemos ya montones de posibilidades 14 00:00:50,789 --> 00:00:52,770 nosotros lo que queremos hacer es una entidad 15 00:00:52,770 --> 00:00:54,789 con lo cual justo, justo tenemos aquí 16 00:00:54,789 --> 00:00:55,770 make entity 17 00:00:55,770 --> 00:00:58,649 que crea o actualiza clases 18 00:00:58,649 --> 00:01:00,390 o entidades de doctrina 19 00:01:00,390 --> 00:01:02,130 por justo lo que queremos 20 00:01:02,130 --> 00:01:04,290 con lo cual vamos a decir 21 00:01:04,290 --> 00:01:06,590 make entity 22 00:01:06,590 --> 00:01:09,829 y nos pide la entidad 23 00:01:09,829 --> 00:01:11,790 la criminal que vamos a hacer es la de departamento 24 00:01:11,790 --> 00:01:14,650 entonces vamos a crear la entidad 25 00:01:14,650 --> 00:01:15,670 departamento 26 00:01:15,670 --> 00:01:17,870 y nos pide 27 00:01:17,870 --> 00:01:19,250 una propiedad 28 00:01:19,250 --> 00:01:26,590 El identificador es ficticio, con lo cual realmente no es un atributo que nosotros queramos definir, que lo haga él si quiere. 29 00:01:27,189 --> 00:01:32,250 Nuestro único atributo importante es el nombre, con lo cual vamos a decírselo, nombre. 30 00:01:33,650 --> 00:01:34,849 ¿Y de qué tipo hay? 31 00:01:35,090 --> 00:01:38,250 Digo, pues en principio es un string, pero voy a ver qué más posibilidades tengo. 32 00:01:38,489 --> 00:01:39,510 Voy a darle al interrogante. 33 00:01:40,230 --> 00:01:45,230 Y veo que tengo string, text, boolean, integer, float y un montón más. 34 00:01:45,230 --> 00:01:47,170 de momento de las que veo 35 00:01:47,170 --> 00:01:49,549 de los tipos principales 36 00:01:49,549 --> 00:01:51,090 la que más adecua es string 37 00:01:51,090 --> 00:01:52,129 que es la que es por defecto 38 00:01:52,129 --> 00:01:53,230 con lo cual doy al enter 39 00:01:53,230 --> 00:01:55,150 ¿qué longitud? 40 00:01:55,390 --> 00:01:56,829 pues un nombre de departamento 41 00:01:56,829 --> 00:01:58,810 no creo que tenga más de 50 caracteres 42 00:01:58,810 --> 00:01:59,689 le doy 50 43 00:01:59,689 --> 00:02:03,390 y digo ¿puede ser nulo este campo? 44 00:02:03,590 --> 00:02:04,170 digo pues no 45 00:02:04,170 --> 00:02:05,530 con lo cual por defecto no 46 00:02:05,530 --> 00:02:09,090 y me pregunta si quiero otra propiedad 47 00:02:09,090 --> 00:02:11,490 no me hace falta más propiedades 48 00:02:11,490 --> 00:02:13,449 con lo cual le doy 49 00:02:13,449 --> 00:02:15,030 al enter 50 00:02:15,030 --> 00:02:28,789 Bien, vamos a ir a hacer ahora la entidad de empleado. Voy, tecleo lo mismo y voy a hacer la entidad empleado. 51 00:02:28,789 --> 00:02:33,129 miro y digo, bueno, ¿qué campos tengo? 52 00:02:33,330 --> 00:02:34,870 digo, el primer campo que tengo es el NIF 53 00:02:34,870 --> 00:02:37,650 el NIF sí es un campo que tiene las características propias 54 00:02:37,650 --> 00:02:40,310 entonces le doy, campo NIF 55 00:02:40,310 --> 00:02:42,210 dice, ¿es de tipo string? 56 00:02:42,310 --> 00:02:45,050 digo, sí, porque son 8 dígitos y una letra 57 00:02:45,050 --> 00:02:48,949 o si es el NIE, pues una X, 7 dígitos y una letra 58 00:02:48,949 --> 00:02:50,210 sí es un string 59 00:02:50,210 --> 00:02:52,830 ¿de cuántos caracteres? de 9 60 00:02:52,830 --> 00:02:56,780 ¿puede ser nulo? no 61 00:02:56,780 --> 00:03:01,020 bueno, añadimos otra propiedad 62 00:03:01,020 --> 00:03:02,659 digo, ¿qué otra propiedad voy a añadir? 63 00:03:02,780 --> 00:03:05,139 digo, por la otra propiedad que voy a añadir es el nombre 64 00:03:05,139 --> 00:03:06,439 un nombre 65 00:03:06,439 --> 00:03:09,560 el nombre completo de la persona es un string 66 00:03:09,560 --> 00:03:11,439 y vamos a ponerle simplemente 67 00:03:11,439 --> 00:03:13,439 que sean por 100 caracteres 68 00:03:13,439 --> 00:03:15,680 ¿va a haber nulos? 69 00:03:15,800 --> 00:03:17,139 no, un nombre tiene que tener 70 00:03:17,139 --> 00:03:19,460 ¿hay algún campo más? 71 00:03:19,520 --> 00:03:21,439 digo, sí, la fecha de nacimiento, nacido 72 00:03:21,439 --> 00:03:23,939 digo, ¿es un string? 73 00:03:24,039 --> 00:03:25,199 digo, bueno, realmente es una fecha 74 00:03:25,199 --> 00:03:26,840 voy a ver si hay algún tipo para fecha 75 00:03:26,840 --> 00:03:28,960 miro un poco más abajo 76 00:03:28,960 --> 00:03:33,020 y veo que por aquí aparece algo que se llama date o fecha, 77 00:03:33,280 --> 00:03:35,319 con lo cual le voy a dar date. 78 00:03:35,919 --> 00:03:37,719 ¿Puede ser nula la fecha de nacimiento? 79 00:03:38,580 --> 00:03:41,620 Bueno, podría intentar que fuera nula por si hay algún problema 80 00:03:41,620 --> 00:03:44,500 o decirle que no, voy a dejarlo que sí, que pueda ser nula. 81 00:03:47,319 --> 00:03:48,919 ¿Y hay algún dato más que quiera? 82 00:03:49,099 --> 00:03:52,639 Digo, jo, yo de un empleado quiero saber a qué departamento pertenece, 83 00:03:52,639 --> 00:03:55,879 así que debería poner su departamento. 84 00:03:57,879 --> 00:03:59,340 Digo, ¿y qué tipo de campo es esto? 85 00:03:59,340 --> 00:04:01,539 digo, pues un string no, será un código 86 00:04:01,539 --> 00:04:03,740 de la entidad departamento 87 00:04:03,740 --> 00:04:05,919 digo, anda, es una relación 88 00:04:05,919 --> 00:04:08,060 digo, y un empleado 89 00:04:08,060 --> 00:04:09,680 ¿cuántos departamentos puede tener? 90 00:04:10,099 --> 00:04:11,520 pues un empleado puede tener 91 00:04:11,520 --> 00:04:12,939 un único departamento 92 00:04:12,939 --> 00:04:15,879 y un departamento, ¿cuántos empleados puede tener? 93 00:04:15,979 --> 00:04:17,439 muchos, o sea 94 00:04:17,439 --> 00:04:19,740 que es many, muchos empleados 95 00:04:19,740 --> 00:04:21,240 to one 96 00:04:21,240 --> 00:04:23,360 un departamento 97 00:04:23,360 --> 00:04:25,019 así que es este tipo 98 00:04:25,019 --> 00:04:26,540 many to one 99 00:04:26,540 --> 00:04:30,540 Pues escriba aquí many to one. 100 00:04:32,379 --> 00:04:34,360 Dice, ¿con qué clase está relacionada? 101 00:04:34,699 --> 00:04:36,259 Pues, ¿con qué entidad está relacionada? 102 00:04:36,379 --> 00:04:39,079 Pues está relacionada con la entidad departamento. 103 00:04:41,500 --> 00:04:47,500 Dice, un empleado, esto resumiendo es que un empleado puede no estar asignado a ningún departamento, 104 00:04:47,620 --> 00:04:52,980 digo, puede ser nulo, bueno, podría ser, podría ser un caso en que un empleado, 105 00:04:52,980 --> 00:04:56,100 en un momento dado, al crearlo no estuviera asignado a un empleado, 106 00:04:56,100 --> 00:05:10,740 Podría ser que sí. Vamos a dejarle que sí. Y ahora me pregunta la parte recíproca. Es decir, ¿quiero en departamento añadir una colección de empleados que pertenece a ese departamento? 107 00:05:11,519 --> 00:05:19,040 Digo, pues mira, sí, me vendría muy bien tener algo que yo pudiera decir de tal departamento, devuélveme todos sus empleados. Así que le voy a decir que sí. 108 00:05:19,040 --> 00:05:23,040 ¿y cómo quiero que se llame ese campo dentro del departamento? 109 00:05:23,120 --> 00:05:25,220 pues le voy a llamar empleados, tal como dice aquí 110 00:05:25,220 --> 00:05:28,220 ¿quiere alguna propiedad más? 111 00:05:28,399 --> 00:05:28,759 digo no 112 00:05:28,759 --> 00:05:31,339 bueno, pues en este momento 113 00:05:31,339 --> 00:05:33,120 ya tengo creadas 114 00:05:33,120 --> 00:05:35,899 las entidades correspondientes 115 00:05:35,899 --> 00:05:37,519 vamos a ver dónde estamos guardando 116 00:05:37,519 --> 00:05:38,720 esa información 117 00:05:38,720 --> 00:05:41,439 nos vamos al directorio src 118 00:05:41,439 --> 00:05:43,879 y en ese directorio 119 00:05:43,879 --> 00:05:46,120 vemos que hay otro subdirectorio 120 00:05:46,120 --> 00:05:47,019 que se llama entities 121 00:05:47,019 --> 00:05:48,420 vamos a entrar en él 122 00:05:48,420 --> 00:05:53,920 y aquí tendremos departamento PHP y empleado PHP 123 00:05:53,920 --> 00:05:57,600 vamos a ver cómo es departamento PHP 124 00:05:57,600 --> 00:06:02,540 y vemos que ha creado una clase departamento 125 00:06:02,540 --> 00:06:06,959 en el cual hay un campo id que se ha inventado él 126 00:06:06,959 --> 00:06:08,500 nosotros no hemos dicho nada del id 127 00:06:08,500 --> 00:06:12,360 un campo nombre y un campo empleados 128 00:06:12,360 --> 00:06:15,720 y ahora dentro de estos ha creado un constructor 129 00:06:15,720 --> 00:06:22,899 con toda la colección de empleados, ha creado guetes y setes 130 00:06:22,899 --> 00:06:30,100 y además ha añadido incluso métodos de añadir un empleado, borrar un empleado 131 00:06:30,100 --> 00:06:37,399 y si continuamos más abajo, pues ya vemos que ahí finaliza toda la clase empleada. 132 00:06:37,980 --> 00:06:41,899 Además ha incluido unas anotaciones propias de Doctrine, 133 00:06:41,899 --> 00:06:51,300 En el cual nos dice que esta entidad, departamento, es una entidad y su repositorio será la clase departamento-repositorio. 134 00:06:52,000 --> 00:06:58,660 Además, id dice que es un id, que es un identificador, que es un valor autogenerado y que es de tipo entero. 135 00:06:58,959 --> 00:07:03,560 Que string, que nombre es de tipo string y tiene un tamaño de 50. 136 00:07:04,259 --> 00:07:10,399 Y que empleados es una relación one to many, un departamento tendrá muchos empleados. 137 00:07:10,399 --> 00:07:13,759 que está relacionado con la clase empleado 138 00:07:13,759 --> 00:07:17,560 y que viene a través de departamento 139 00:07:17,560 --> 00:07:20,180 bueno, pues todo esto ha creado para departamento 140 00:07:20,180 --> 00:07:23,680 vamos a ver que ha creado ahora para empleado 141 00:07:23,680 --> 00:07:29,100 para empleado nos ha creado también una clase 142 00:07:29,100 --> 00:07:31,959 que tiene un identificador, que se ha inventado él 143 00:07:31,959 --> 00:07:34,620 un if, que era nuestro campo 144 00:07:34,620 --> 00:07:37,120 nuestro campo clave hasta ahora 145 00:07:37,120 --> 00:07:40,040 un campo nombre 146 00:07:40,040 --> 00:07:47,079 un campo de nacimiento, una fecha de nacimiento que es de tipo date 147 00:07:47,079 --> 00:07:50,779 y un many to one, un campo de departamento 148 00:07:50,779 --> 00:07:54,980 en el cual está relacionado con la clase departamento 149 00:07:54,980 --> 00:07:58,439 bueno, si seguimos viendo el código 150 00:07:58,439 --> 00:08:02,879 vemos que están los getes y los setes correspondientes a esta clase 151 00:08:02,879 --> 00:08:07,079 y ya estaría todo este código funcionando 152 00:08:08,079 --> 00:08:22,060 Podríamos entrar ahora y ver en el directorio repository que ya ha creado también un repositorio de departamento y otro para empleado. 153 00:08:22,560 --> 00:08:24,839 Vamos a verlo rápidamente, el de departamento al menos. 154 00:08:26,839 --> 00:08:30,680 Y en él nos dice que hay una serie de campos y de métodos que ya están funcionando. 155 00:08:30,680 --> 00:08:40,759 como es find, encontrar mediante un id, findOneBy, en el cual pondremos los criterios y nos devolverá el primero, 156 00:08:41,860 --> 00:08:48,399 findAll, que nos devolverá todos, y findBy, que poniendo unos criterios nos devolverá por esos criterios. 157 00:08:49,279 --> 00:08:59,100 Bueno, aquí vemos un pequeño código e incluso deja unos ejemplos de cómo podíamos hacer algo de código que nos pueda servir posteriormente. 158 00:08:59,100 --> 00:09:10,740 Lo mismo tendremos en empleado y con esto ya tenemos hecho las dos entidades y preparadas ya para que dentro de poco hagamos el cruz de todas ellas.