Laravel

Cómo llenar un select en Laravel

Si se preguntan Cómo llenar un select en Laravel, aquí tenemos la respuesta y veremos que es muy sencillo integrarlo y vamos a exponer 2 ejemplos: usando un array y datos de una base de datos.

Cómo llenar un select en Laravel

A continuación, veremos 4 pasos que nos servirá para lograr poblar una etiqueta de lista desplegable (SELECT TAG)

Paso 01: Crear el Modelo y Migración

Nos apoyaremos de la terminal de visual studio code o en su consola preferida para generar el modelo y la migración.

php artisan make:model Ciudad -m

Datos del Modelo de ciudades

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Ciudad extends Model
{
    use HasFactory;

    public $fillable = ['name'];
}

Contenido de la Migración ciudad

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up(): void
    {
        Schema::create('ciudads', function (Blueprint $table) {
            $table->id();
            $table->string('name')->nullable();
            $table->timestamps();
        });
    }

    public function down(): void
    {
        Schema::dropIfExists('ciudads');
    }
};

Una vez creado y actualizada la información de la migración podemos usar la siguiente línea de comando en nuestro editor vscode para compilar la tabla e insertarlo en MySQL u otro gestor de datos.

php artisan migrate

Paso 02: Crear la Ruta

Las rutas son importantes para que este ejemplo sea visible en el navegador y se debe de configurar en la siguiente ruta.

routes/web.php

<?php

use App\Http\Controllers\CiudadController;
use Illuminate\Support\Facades\Route;

Route::resource('/dashboard/ciudades', CiudadController::class);

Paso 03: Creación del controlador

Usaremos la siguiente linea de comando para generar un controlador en nuestro proyecto.

php artisan make:controller CiudadController --model=Ciudad

Contenido del controlador

<?php

namespace App\Http\Controllers;

use App\Models\Ciudad;
use Illuminate\Http\Request;

class CiudadController extends Controller
{
    public function index()
    {
        $ciudades = Ciudad::all();
        return view("admin.ciudades.index", compact('ciudades'));
    }
}

Paso 04: Crear del archivo Blade

Podemos crearlo de manera manual en la carpeta resources/views

<!DOCTYPE html>
<html lang="en">

<head>

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">

    <title>Llenar select en Laravel - Baulphp.com </title>

</head>

<body class="sidebar-mini">
<section class="px-2 pt-2 mx-2 bg-white">
        <div class="card p-3">
            <form action="" method="POST" enctype="multipart/form-data">
                @csrf


                <div class="row mt-3">
                    <div class="col-md-12">
                        <label for="">Titulo</label>

                        <input type="text" class="form-control" name="title" value="">
                    </div>
                    <div class="col-md-12">
                        <label for="">Lista de Ciudades</label>
                        <select name="" class="form-control">
                            <option value="">Seleccione</option>
                            @foreach ($ciudades as $value)
                                <option value="{{ $value->id }}">{{ $value->name }}</option>
                            @endforeach
                        </select>
                    </div>
                </div>

                <div class="row mt-3">
                    <div class="col-md-6">
                        <div class="flex justify-end">
                            <button class="btn btn-primary">
                                Guardar
                            </button>
                        </div>
                    </div>
                </div>

            </form>
        </div>
    </section>
</body>
</html>

Con estos 4 pasos hemos completado los puntos importantes para llenar un select en Laravel 11

Formas de llenar un select en Laravel

Para llenar un select debemos de declararlo en nuestro archivo controlador. Por lo tanto, en líneas arriba hemos creado el controlador llamado: CiudadController

En la función index podemos declarar como se llenará y pude ser de dos tipos:

  • Primera forma: Llenar select con un array
  • Segunda forma: Usando datos de una base de datos

En esta parte tenemos que hacer una consulta SQL a través de Query Builder o eloquent de Laravel.

Básicamente, la configuración es en el controlador CiudadController, veamos su contenido.

Llenar un select en laravel usando Array

En este caso ya no se usará base de datos sino un array personalizado como ser una lista de países, etc.

  • Además, solo debemos de realizar 2 modificaciones tanto en el controlador como en el blade.
  • Modificamos nuestro controlador de la siguiente, manera en la función index()
  • Editamos el blade en el foreach para que reciba datos del array personalizado
<?php

namespace App\Http\Controllers;

use App\Models\Ciudad;
use Illuminate\Http\Request;
class CiudadController extends Controller
{
    public function index()
    {
       $data = collect([
        ['id_ciudad' => '1', 'nombre' => 'Argentina'],
        ['id_ciudad' => '2', 'nombre' => 'Colombia'],
        ['id_ciudad' => '3', 'nombre' => 'Chile'],
        ['id_ciudad' => '4', 'nombre' => 'Ecuador'],
        ['id_ciudad' => '5', 'nombre' => 'Uruguay'],
    ]);
   
    $ciudad = $data->pluck('nombre', 'id_ciudad');
    $ciudades =  $ciudad->all(); // ['1' => 'Argentina', '2' => 'Colombia']
        return view("admin.ciudades.index", compact('ciudades'));
    }

Editamos nuestro blade para que el ciclo foreach acepte el array personalizado

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
    <title>Llenar select en Laravel - Baulphp.com </title>


</head>


<body class="sidebar-mini">
<section class="px-2 pt-2 mx-2 bg-white">
        <div class="card p-3">
            <form action="" method="POST" enctype="multipart/form-data">
                @csrf


                <div class="row mt-3">
                   
                    <div class="col-md-12">
                        <label for="">Lista de Ciudades</label>


                        <select name="" class="form-control">
                            <option value="">Seleccione</option>
                            @foreach ($ciudades as $key => $value)
                                <option value="{{ $key }}">{{ $value }}</option>
                            @endforeach
                        </select>
                    </div>
                </div>
            </form>
        </div>
    </section>
</body>

</html>

En Resumen, hemos aprendido a poblar una etiqueta de lista desplegable usando un array o información de una base de datos.

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Esta web utiliza cookies propias para su correcto funcionamiento. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad