{"componentChunkName":"component---src-templates-post-template-js","path":"/posts/combos-dependientes-react-y-laravel/","result":{"data":{"markdownRemark":{"id":"572259e0-8ced-5f40-ba70-2a06fc56c2dc","html":"<p>En este tutorial vamos a trabajar haciendo un par de combos(<strong>select</strong>) dependientes, por ejemplo: supongamos el siguiente caso:</p>\n<p>Tenemos un formulario con un combo para seleccionar el <strong>Pais</strong> y luego de este tenemos un combo que nos permite seleccionar una <strong>Región</strong>/<strong>Departamento</strong> o algún tipo de subdivisión política del país en cuestión, pero en este segundo combo <em>deben aparecer nada mas las Regiones que pertenecen al país seleccionado en el primer combo</em>.</p>\n<p>Teniendo este caso en mente vamos a comenzar desde ceros, realizando todo en un proyecto nuevo de Laravel, para esto vamos a seguir los siguientes pasos:</p>\n<h3 id=\"1-crear-proyecto-nuevo-de-laravel\"><a href=\"#1-crear-proyecto-nuevo-de-laravel\" aria-label=\"1 crear proyecto nuevo de laravel permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. Crear proyecto nuevo de Laravel</h3>\n<div>Para crear un nuevo proyecto lo podemos hacer con el comando laravel(paquete global instalado con composer) o directamente con composer, en este caso lo haré con el comando laravel:\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">laravel new combosdependientes</code></pre></div>\n<p>Entramos al proyecto que hemos creado con el comando CD</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token builtin class-name\">cd</span> combosdependientes/</code></pre></div>\n<h3 id=\"2-generar-los-modelos-que-vamos-a-utilizar-en-el-proyecto\"><a href=\"#2-generar-los-modelos-que-vamos-a-utilizar-en-el-proyecto\" aria-label=\"2 generar los modelos que vamos a utilizar en el proyecto permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. Generar los modelos que vamos a utilizar en el proyecto</h3>\n<p>En este caso además de generar los modelos vamos generar las migraciones y los controladores que vamos a necesitar, para esto vamos a usar el comando de artisan:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">php artisan make:model Pais -a\nphp artisan make:model Departamento -a</code></pre></div>\n<h3 id=\"3-crear-las-rutas-necesarias-para-el-proyecto\"><a href=\"#3-crear-las-rutas-necesarias-para-el-proyecto\" aria-label=\"3 crear las rutas necesarias para el proyecto permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3. Crear las rutas necesarias para el proyecto</h3>\n<p>En esta caso vamos a generar TODAS las rutas para hacer un CRUD, no obstante en este tutorial solo vamos a hacer las peticiones GET para obtener el listado de cada uno de los modelos:</p>\n<div class=\"gatsby-highlight\" data-language=\"php\"><pre class=\"language-php\"><code class=\"language-php\">Route<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">apiResource</span><span class=\"token punctuation\">(</span><span class=\"token single-quoted-string string\">'paises'</span><span class=\"token punctuation\">,</span> <span class=\"token single-quoted-string string\">'PaisController'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">[</span><span class=\"token single-quoted-string string\">'parameters'</span> <span class=\"token operator\">=</span><span class=\"token operator\">></span> <span class=\"token punctuation\">[</span><span class=\"token single-quoted-string string\">'paises'</span> <span class=\"token operator\">=</span><span class=\"token operator\">></span> <span class=\"token single-quoted-string string\">'pais'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\nRoute<span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token function\">apiResource</span><span class=\"token punctuation\">(</span><span class=\"token single-quoted-string string\">'paises.departamentos'</span><span class=\"token punctuation\">,</span> <span class=\"token single-quoted-string string\">'DepartamentoController'</span><span class=\"token punctuation\">,</span>  <span class=\"token punctuation\">[</span><span class=\"token single-quoted-string string\">'parameters'</span> <span class=\"token operator\">=</span><span class=\"token operator\">></span> <span class=\"token punctuation\">[</span><span class=\"token single-quoted-string string\">'paises'</span> <span class=\"token operator\">=</span><span class=\"token operator\">></span> <span class=\"token single-quoted-string string\">'pais'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Con los comandos anteriores hemos generado varias rutas, para ver que rutas se generan y podemos usar para hacer nuestras peticiones podemos ejecutar el comando:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">php artisan route:list -c</code></pre></div>\n<p>La salida del comando anterior debe ser algo como esto:</p>\n<p><a href=\"https://1.bp.blogspot.com/-eniXt7hk6UU/XUOxDd6zFGI/AAAAAAAAnpI/Y3UNX7nOLIsRz3cuvv9KV7zqymQ5rfGZQCLcBGAs/s1600/Captura%2Bde%2BPantalla%2B2019-08-01%2Ba%2Bla%2528s%2529%2B9.41.45%2Bp.%2Bm..png\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img src=\"https://1.bp.blogspot.com/-eniXt7hk6UU/XUOxDd6zFGI/AAAAAAAAnpI/Y3UNX7nOLIsRz3cuvv9KV7zqymQ5rfGZQCLcBGAs/s640/Captura%2Bde%2BPantalla%2B2019-08-01%2Ba%2Bla%2528s%2529%2B9.41.45%2Bp.%2Bm..png\"></a></p>\n<h3 id=\"4-configurar-el-proyecto-para-trabajar-con-react\"><a href=\"#4-configurar-el-proyecto-para-trabajar-con-react\" aria-label=\"4 configurar el proyecto para trabajar con react permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><strong>4. Configurar el proyecto para trabajar con React</strong></h3>\n<p>Para que el proyecto de Laravel soporte React solamente debemos ejecutar el comando: <em><strong>php artisan preset react</strong></em> este comando hace las configuraciones necesarias en el proyecto y la salida en la terminal debe ser algo como esto:</p>\n<p><a href=\"https://1.bp.blogspot.com/-Z00Hz1FW244/XUOxS8hrhDI/AAAAAAAAnpM/o7FLr3C4uO8eCiZMUxM0gsQJUDZ8r98dwCLcBGAs/s1600/Captura%2Bde%2BPantalla%2B2019-08-01%2Ba%2Bla%2528s%2529%2B9.42.51%2Bp.%2Bm..png\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img src=\"https://1.bp.blogspot.com/-Z00Hz1FW244/XUOxS8hrhDI/AAAAAAAAnpM/o7FLr3C4uO8eCiZMUxM0gsQJUDZ8r98dwCLcBGAs/s640/Captura%2Bde%2BPantalla%2B2019-08-01%2Ba%2Bla%2528s%2529%2B9.42.51%2Bp.%2Bm..png\"></a></p>\n<h3 id=\"5-configurar-la-conexión-a-la-base-de-datos\"><a href=\"#5-configurar-la-conexi%C3%B3n-a-la-base-de-datos\" aria-label=\"5 configurar la conexión a la base de datos permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5. Configurar la conexión a la base de datos.</h3>\n<p>En mi caso yo uso postgres, pero tú lo puedes configurar con el motor de base de datos de tu preferencia, por defecto Laravel trae algunas configuraciones para MySQL. En mi caso especifico la base de datos se llama <em><strong>combosdependientes</strong></em>, esta base de datos debe existir para que el proyecto funcione, sino la tienes debes crearla:</p>\n<p><a href=\"https://1.bp.blogspot.com/-JUdNa3Gr4Tc/XUOxsmiOpJI/AAAAAAAAnpY/FnNyJ9Ii5zoE1EyiXowxBhNrZOWYbgYigCLcBGAs/s1600/Captura%2Bde%2BPantalla%2B2019-08-01%2Ba%2Bla%2528s%2529%2B9.44.36%2Bp.%2Bm..png\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img src=\"https://1.bp.blogspot.com/-JUdNa3Gr4Tc/XUOxsmiOpJI/AAAAAAAAnpY/FnNyJ9Ii5zoE1EyiXowxBhNrZOWYbgYigCLcBGAs/s640/Captura%2Bde%2BPantalla%2B2019-08-01%2Ba%2Bla%2528s%2529%2B9.44.36%2Bp.%2Bm..png\"></a>a</p>\n<h3 id=\"6-generar-la-autenticación-para-el-proyectologin-y-registro\"><a href=\"#6-generar-la-autenticaci%C3%B3n-para-el-proyectologin-y-registro\" aria-label=\"6 generar la autenticación para el proyectologin y registro permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>6. Generar la autenticación para el proyecto(Login y Registro)</h3>\n<p>Laravel viene con baterías incluidas, en este caso algo que casi todo sistema necesita, el Login y el Registro de usuarios. Esto se puede generar fácilmente con el comando <em><strong>php artisan make:auth</strong></em></p>\n<p><a href=\"https://1.bp.blogspot.com/-MBrXzE_CW80/XUOx-xS_hgI/AAAAAAAAnpg/wJTlrl1c6Q0OdgATVbJ3-jaQ9ekXgc1vwCLcBGAs/s1600/Captura%2Bde%2BPantalla%2B2019-08-01%2Ba%2Bla%2528s%2529%2B9.45.49%2Bp.%2Bm..png\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img src=\"https://1.bp.blogspot.com/-MBrXzE_CW80/XUOx-xS_hgI/AAAAAAAAnpg/wJTlrl1c6Q0OdgATVbJ3-jaQ9ekXgc1vwCLcBGAs/s640/Captura%2Bde%2BPantalla%2B2019-08-01%2Ba%2Bla%2528s%2529%2B9.45.49%2Bp.%2Bm..png\"></a></p>\n<h3 id=\"7-modificar-y-ejecutar-las-migraciones-para-la-creación-de-nuestras-tablas-de-la-base-de-datos\"><a href=\"#7-modificar-y-ejecutar-las-migraciones-para-la-creaci%C3%B3n-de-nuestras-tablas-de-la-base-de-datos\" aria-label=\"7 modificar y ejecutar las migraciones para la creación de nuestras tablas de la base de datos permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>7. Modificar y ejecutar las migraciones para la creación de nuestras tablas de la base de datos:</h3>\n<p>Cuando generamos los modelos y controladores también se nos crearon los archivos de migraciones, que básicamente son clases de php que nos van a permitir generar las tablas de nuestra base de datos y llevar un control de versiones de las modificaciones que hagamos, estas migraciones se encuentras en la ruta: <em><strong>/database/migrations</strong></em></p>\n<p>Vamos a modificar las dos migraciones que hemos generado, la de país y la de departamento, escribiendo el siguiente código:</p>\n<p>En la migración de <strong>pais</strong> y en método up:</p>\n<p><a href=\"https://1.bp.blogspot.com/-417Ou5v0ZuA/XUTJAmn8x-I/AAAAAAAAntI/WuuDYUqfajsEQfs1PWzXc-6eJHQZUNmYACLcBGAs/s1600/Captura%2Bde%2BPantalla%2B2019-08-02%2Ba%2Bla%2528s%2529%2B5.35.58%2Bp.%2Bm..png\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img src=\"https://1.bp.blogspot.com/-417Ou5v0ZuA/XUTJAmn8x-I/AAAAAAAAntI/WuuDYUqfajsEQfs1PWzXc-6eJHQZUNmYACLcBGAs/s640/Captura%2Bde%2BPantalla%2B2019-08-02%2Ba%2Bla%2528s%2529%2B5.35.58%2Bp.%2Bm..png\"></a></p>\n<p>En la migración de <strong>pais</strong> y el método down:</p>\n<p><a href=\"https://1.bp.blogspot.com/-PCOM1zJCMQo/XUTJMsGU_TI/AAAAAAAAntM/EgwmwG1SMeIt5u_nw4qUUZstyv0WxiDIQCLcBGAs/s1600/Captura%2Bde%2BPantalla%2B2019-08-02%2Ba%2Bla%2528s%2529%2B5.37.11%2Bp.%2Bm..png\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img src=\"https://1.bp.blogspot.com/-PCOM1zJCMQo/XUTJMsGU_TI/AAAAAAAAntM/EgwmwG1SMeIt5u_nw4qUUZstyv0WxiDIQCLcBGAs/s640/Captura%2Bde%2BPantalla%2B2019-08-02%2Ba%2Bla%2528s%2529%2B5.37.11%2Bp.%2Bm..png\"></a></p>\n<p>En la migración de <strong>departamento</strong> y en método <strong>up</strong>:</p>\n<p><a href=\"https://1.bp.blogspot.com/-Ef8PPl1Nimo/XUeqjDwGvhI/AAAAAAAAnv0/JXbldQaY3JA7dmZBkrGKMmHnYqTsT8QxgCLcBGAs/s1600/Captura%2Bde%2BPantalla%2B2019-08-04%2Ba%2Bla%2528s%2529%2B10.02.37%2Bp.%2Bm..png\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img src=\"https://1.bp.blogspot.com/-Ef8PPl1Nimo/XUeqjDwGvhI/AAAAAAAAnv0/JXbldQaY3JA7dmZBkrGKMmHnYqTsT8QxgCLcBGAs/s640/Captura%2Bde%2BPantalla%2B2019-08-04%2Ba%2Bla%2528s%2529%2B10.02.37%2Bp.%2Bm..png\"></a></p>\n<p>En la migración de <strong>departamento</strong> y el método <strong>down</strong>:</p>\n<p><a href=\"https://1.bp.blogspot.com/-3hx1Y9evK2s/XUTJjqmHyQI/AAAAAAAAntc/JdIsY6MoW9kFqenCYi0VlmLheJ92rnwlgCLcBGAs/s1600/Captura%2Bde%2BPantalla%2B2019-08-02%2Ba%2Bla%2528s%2529%2B5.38.44%2Bp.%2Bm..png\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img src=\"https://1.bp.blogspot.com/-3hx1Y9evK2s/XUTJjqmHyQI/AAAAAAAAntc/JdIsY6MoW9kFqenCYi0VlmLheJ92rnwlgCLcBGAs/s640/Captura%2Bde%2BPantalla%2B2019-08-02%2Ba%2Bla%2528s%2529%2B5.38.44%2Bp.%2Bm..png\"></a></p>\n<p>Es Importante que los métodos de las migraciones queden tal cual te he mostrado en las imágenes anteriores</p>\n<h3 id=\"8-ejecutar-las-migraciones\"><a href=\"#8-ejecutar-las-migraciones\" aria-label=\"8 ejecutar las migraciones permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>8. Ejecutar las migraciones</h3>\n<p>Al ejecutar las migraciones lo que lograremos es que se creen las tablas en la base de datos que hasta el momento está en blanco, para correr las migraciones lo hacemos con el comando <strong>php artisan migrate</strong> el modificador <strong>refresh</strong> hace las migraciones como desde ceros si ya las habias ejecutado con anterioridad, la salida de este comando debe ser algo similar a esto:</p>\n<p><a href=\"https://1.bp.blogspot.com/-Y6OlJobP6Ag/XUOyM77IMzI/AAAAAAAAnpk/0e1g83PwZkI44kuVE0RrGqsfI6QL4rPSQCLcBGAs/s1600/Captura%2Bde%2BPantalla%2B2019-08-01%2Ba%2Bla%2528s%2529%2B9.46.46%2Bp.%2Bm..png\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img src=\"https://1.bp.blogspot.com/-Y6OlJobP6Ag/XUOyM77IMzI/AAAAAAAAnpk/0e1g83PwZkI44kuVE0RrGqsfI6QL4rPSQCLcBGAs/s640/Captura%2Bde%2BPantalla%2B2019-08-01%2Ba%2Bla%2528s%2529%2B9.46.46%2Bp.%2Bm..png\"></a></p>\n<p><a href=\"https://1.bp.blogspot.com/-hESNk2sklFk/XUO0eAoy-qI/AAAAAAAAnp4/zAUYqGI9JusXaBaOv9bPfNVCGIpdmAlTACLcBGAs/s1600/Captura%2Bde%2BPantalla%2B2019-08-01%2Ba%2Bla%2528s%2529%2B9.56.21%2Bp.%2Bm..png\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img src=\"https://1.bp.blogspot.com/-hESNk2sklFk/XUO0eAoy-qI/AAAAAAAAnp4/zAUYqGI9JusXaBaOv9bPfNVCGIpdmAlTACLcBGAs/s640/Captura%2Bde%2BPantalla%2B2019-08-01%2Ba%2Bla%2528s%2529%2B9.56.21%2Bp.%2Bm..png\"></a></p>\n<h3 id=\"9-poner-datos-en-nuestra-base-de-datos\"><a href=\"#9-poner-datos-en-nuestra-base-de-datos\" aria-label=\"9 poner datos en nuestra base de datos permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>9. Poner datos en nuestra base de datos:</h3>\n<p>Esto lo haremos de forma manual, pero en Laravel también hay una forma de poblar la base de datos con datos de pruebas:</p>\n<p>Tabla de paises:</p>\n<p><a href=\"https://1.bp.blogspot.com/-BEcYkjqxCk0/XUO1BLaUSpI/AAAAAAAAnqA/HEF-zFk7JV8nR0Rp9B8Pacajc1oUycDfACLcBGAs/s1600/Captura%2Bde%2BPantalla%2B2019-08-01%2Ba%2Bla%2528s%2529%2B9.58.36%2Bp.%2Bm..png\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img src=\"https://1.bp.blogspot.com/-BEcYkjqxCk0/XUO1BLaUSpI/AAAAAAAAnqA/HEF-zFk7JV8nR0Rp9B8Pacajc1oUycDfACLcBGAs/s640/Captura%2Bde%2BPantalla%2B2019-08-01%2Ba%2Bla%2528s%2529%2B9.58.36%2Bp.%2Bm..png\"></a></p>\n<p>Tabla de departamentos:</p>\n<p><img src=\"https://1.bp.blogspot.com/-EfWa_VfZGI8/XUO1BDih0NI/AAAAAAAAnqE/tHzBCKUcZSUsvgeTKxRud8Qot7HNo0DxACLcBGAs/s640/Captura%2Bde%2BPantalla%2B2019-08-01%2Ba%2Bla%2528s%2529%2B9.58.42%2Bp.%2Bm..png\"></p>\n<h3 id=\"10-preparar-el-proyecto-para-trabajar-con-el-front\"><a href=\"#10-preparar-el-proyecto-para-trabajar-con-el-front\" aria-label=\"10 preparar el proyecto para trabajar con el front permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>10. Preparar el proyecto para trabajar con el front:</h3>\n<p>Para esto primero vamos a instalar las dependencias con el comando:</p>\n<p><strong><em>npm install</em></strong></p>\n<p>Después de instalar las dependencias vamos a realizar algunos cambios en la plantilla de <em><strong>home.blade.php</strong></em> y también en el componente de ejemplo:</p>\n<p>Archivo /resources/views/home.blade.php</p>\n<p><a href=\"https://1.bp.blogspot.com/-HFk_NoJZtA8/XUO52zWXkTI/AAAAAAAAnqY/EEi4xgFtBP0KdBRxL7ohia9SKYQ225J1ACLcBGAs/s1600/Captura%2Bde%2BPantalla%2B2019-08-01%2Ba%2Bla%2528s%2529%2B10.18.25%2Bp.%2Bm..png\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img src=\"https://1.bp.blogspot.com/-HFk_NoJZtA8/XUO52zWXkTI/AAAAAAAAnqY/EEi4xgFtBP0KdBRxL7ohia9SKYQ225J1ACLcBGAs/s640/Captura%2Bde%2BPantalla%2B2019-08-01%2Ba%2Bla%2528s%2529%2B10.18.25%2Bp.%2Bm..png\"></a></p>\n<p>Archivo /resources/js/components/Example.js</p>\n<p><a href=\"https://1.bp.blogspot.com/-d5-98XaA5hI/XUO52_k9I5I/AAAAAAAAnqc/GogDllw_2Nc1jBjzqGXoewf4U8xzV7A6QCLcBGAs/s1600/Captura%2Bde%2BPantalla%2B2019-08-01%2Ba%2Bla%2528s%2529%2B10.19.07%2Bp.%2Bm..png\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img src=\"https://1.bp.blogspot.com/-d5-98XaA5hI/XUO52_k9I5I/AAAAAAAAnqc/GogDllw_2Nc1jBjzqGXoewf4U8xzV7A6QCLcBGAs/s640/Captura%2Bde%2BPantalla%2B2019-08-01%2Ba%2Bla%2528s%2529%2B10.19.07%2Bp.%2Bm..png\"></a></p>\n<p>Ahora podemos compilar con el comando <em>**npm run dev **</em><span style=\"text-align: center;\">y ver el resultado en el navegador</span></p>\n<p><a href=\"https://1.bp.blogspot.com/-c09Iy9w0qnM/XUO6Sg-dTBI/AAAAAAAAnqo/3D-flG6e_hcawh4_bqucBpFcDJafPuPNQCLcBGAs/s1600/Captura%2Bde%2BPantalla%2B2019-08-01%2Ba%2Bla%2528s%2529%2B10.20.46%2Bp.%2Bm..png\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img src=\"https://1.bp.blogspot.com/-c09Iy9w0qnM/XUO6Sg-dTBI/AAAAAAAAnqo/3D-flG6e_hcawh4_bqucBpFcDJafPuPNQCLcBGAs/s640/Captura%2Bde%2BPantalla%2B2019-08-01%2Ba%2Bla%2528s%2529%2B10.20.46%2Bp.%2Bm..png\"></a></p>\n<p>El navegador nos debería mostrar algo como lo anterior, lo que está encerrado en el rectángulo rojo es nuestro componente <strong>Example</strong>.</p>\n<h3 id=\"11-el-código-para-los-controladores\"><a href=\"#11-el-c%C3%B3digo-para-los-controladores\" aria-label=\"11 el código para los controladores permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>11. El código para los controladores:</h3>\n<p>Recordemos que por el momento este proyecto solo es rellenar los combos y no haremos todas las acciones del CRUD, en este caso será nada mas el método <strong>index</strong> que nos debe retornar el listado de todos los recursos de cada tabla:</p>\n<p>El código del controlador de pais:</p>\n<p><a href=\"https://1.bp.blogspot.com/-Z_ikYocfXGA/XUeprwxXhpI/AAAAAAAAnvk/kSiHNrB4lm4x8FXLBxkDvYUvqAPf_vIyQCLcBGAs/s1600/Captura%2Bde%2BPantalla%2B2019-08-04%2Ba%2Bla%2528s%2529%2B9.55.44%2Bp.%2Bm..png\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img src=\"https://1.bp.blogspot.com/-Z_ikYocfXGA/XUeprwxXhpI/AAAAAAAAnvk/kSiHNrB4lm4x8FXLBxkDvYUvqAPf_vIyQCLcBGAs/s640/Captura%2Bde%2BPantalla%2B2019-08-04%2Ba%2Bla%2528s%2529%2B9.55.44%2Bp.%2Bm..png\"></a></p>\n<p>El código del controlador de departamento:</p>\n<p><a href=\"https://1.bp.blogspot.com/-lVigavLbA4M/XUep0wZQWkI/AAAAAAAAnvo/YYtfsqEqL-srhDr-Xu5O44slzdli9XpxwCLcBGAs/s1600/Captura%2Bde%2BPantalla%2B2019-08-04%2Ba%2Bla%2528s%2529%2B9.55.58%2Bp.%2Bm..png\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img src=\"https://1.bp.blogspot.com/-lVigavLbA4M/XUep0wZQWkI/AAAAAAAAnvo/YYtfsqEqL-srhDr-Xu5O44slzdli9XpxwCLcBGAs/s640/Captura%2Bde%2BPantalla%2B2019-08-04%2Ba%2Bla%2528s%2529%2B9.55.58%2Bp.%2Bm..png\"></a></p>\n<h3 id=\"12-el-código-necesario-para-el-modelo-de-pais\"><a href=\"#12-el-c%C3%B3digo-necesario-para-el-modelo-de-pais\" aria-label=\"12 el código necesario para el modelo de pais permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>12. El código necesario para el modelo de Pais:</h3>\n<p>En nuestro modelo vamos necesitar hacer algunas configuraciones, ya que estamos rompiendo con algunas de las convenciones que Laravel nos recomienda o “exige”, ademas de crear la relacione existente entre paises y departamentos, verifica que tus modelos tengan el siguiente código:</p>\n<p><a href=\"https://1.bp.blogspot.com/--ckiTJ7cm9U/XUhAHSk3J-I/AAAAAAAAnwg/5nDByIMTdYo1TUhG6MT5obYI4WyzIiTnACLcBGAs/s1600/Pais.php.png\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img src=\"https://1.bp.blogspot.com/--ckiTJ7cm9U/XUhAHSk3J-I/AAAAAAAAnwg/5nDByIMTdYo1TUhG6MT5obYI4WyzIiTnACLcBGAs/s640/Pais.php.png\"></a></p>\n<h3 id=\"13-ok-ahora-que-tenemos-el-entorno-listo-hagamos-el-trabajo-con-react\"><a href=\"#13-ok-ahora-que-tenemos-el-entorno-listo-hagamos-el-trabajo-con-react\" aria-label=\"13 ok ahora que tenemos el entorno listo hagamos el trabajo con react permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>13. Ok, ahora que tenemos el entorno listo, hagamos el trabajo con React</h3>\n<p>Vamos a escribir dos componentes nuevos y los usaremos dentro del componente de Example para facilitar las cosas, primero escribamos el código del componente que va a mostrar la lista de paises, le llamaremos <strong>ComboPais.js</strong> y tendrá el siguiente código:</p>\n<p><a href=\"https://1.bp.blogspot.com/-q_M5SGyx6H0/XUTNPvZKnNI/AAAAAAAAnts/urjmc66uS9g21DU1gQKo44ocTLH7kEhwgCLcBGAs/s1600/ComboPais.js.png\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img src=\"https://1.bp.blogspot.com/-q_M5SGyx6H0/XUTNPvZKnNI/AAAAAAAAnts/urjmc66uS9g21DU1gQKo44ocTLH7kEhwgCLcBGAs/s640/ComboPais.js.png\"></a></p>\n<p>También tenemos el código para el componente que va a mostrar la lista de departamentos:</p>\n<p><a href=\"https://1.bp.blogspot.com/-P9LUkRlZ7qQ/XUTNcASSf2I/AAAAAAAAntw/WLY7rmWPY1omkiOKGMtAROqQ7MivKd4KwCLcBGAs/s1600/ComboDepartamento.js.png\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img src=\"https://1.bp.blogspot.com/-P9LUkRlZ7qQ/XUTNcASSf2I/AAAAAAAAntw/WLY7rmWPY1omkiOKGMtAROqQ7MivKd4KwCLcBGAs/s640/ComboDepartamento.js.png\"></a></p>\n<p>Y ahora nuestro componente <strong>Example</strong> debe tener el siguiente código:</p>\n<p><a href=\"https://1.bp.blogspot.com/-5Gc-5IZtn6E/XUTN-KV_d4I/AAAAAAAAnt8/_rNzXm25eqAtZx-aOWUTqhMxGz6SkRqOQCLcBGAs/s1600/Example.js.png\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><img src=\"https://1.bp.blogspot.com/-5Gc-5IZtn6E/XUTN-KV_d4I/AAAAAAAAnt8/_rNzXm25eqAtZx-aOWUTqhMxGz6SkRqOQCLcBGAs/s640/Example.js.png\"></a></p>","fields":{"slug":"/posts/combos-dependientes-react-y-laravel/","tagSlugs":["/tag/laravel/","/tag/react/"]},"frontmatter":{"date":"2019-08-02T22:12:03.284Z","description":"En este tutorial vamos a trabajar haciendo un par de combos(select) dependientes","tags":["Laravel","React"],"title":"Combos dependientes con React y Laravel","socialImage":"/media/image-2.jpg"}}},"pageContext":{"isCreatedByStatefulCreatePages":false,"slug":"/posts/combos-dependientes-react-y-laravel/"}}}