Llenar un select en Laravel

publicado por: Anonymous

Tengo un problema al tratar de rellenar un select con datos de la BD, con laravel 5.6

En mi controlador tengo el siguiente código:

public function index()
{
    $roles=roleUser::pluck('id_role','nombre');

    return view('auth.register',compact('roles') );
} 

en mi vista la tengo de esta manera

<select id="id_role" name="id_role" class="form-control">
       <option>------Seleccionar------</option>
       @foreach($roles as $role)
       <option value="{{ $role['id_role'] }}">{{ $role['nombre'] }}</option>
       @endforeach
</select>

Pero cuando renderiza no me muestra ningun dato solamente asi:

<select id="id_role" name="id_role" class="form-control">
     <option>------Seleccionar------</option>
     <option value=""></option>
     <option value=""></option>
     <option value=""></option>
     <option value=""></option>
     <option value=""></option>
     <option value=""></option>
     <option value=""></option>
     <option value=""></option>
 </select>

solución

Partimos de la base de que el modelo roleUser tiene datos. El problema se te genera después de utilizar el método pluck (Documentación oficial), este método te devuelve una colección en formato clave/valor. Es decir, si tenemos los siguientes datos obtendríamos:

$data = collect([
    ['id_role' => '1', 'nombre' => 'usuario'],
    ['id_role' => '2', 'nombre' => 'administrador'],
]);

$roles = $data->pluck('nombre', 'id_role');

$roles->all(); // ['1' => 'usuario', '2' => 'administrador']

Fíjate que la forma en la que hice el pluck es la siguiente: pluck('nombre', 'id_role'), ya que el primer parámetro obtiene los valores y el segundo las claves a los que se los asignas. Ese es tu primer fallo, haces la asignación a la inversa.

Después, la forma correcta de imprimir un conjunto de claves/valor sería la siguiente:

@foreach( $roles as $key => $value )
   <option value="{{ $key }}">{{ $value }}</option>
@endforeach
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *