Cuando trabajamos con Eloquent en Laravel, muchas veces necesitamos transformar los resultados de una consulta en un array con una estructura específica. En este caso, queremos que la clave del array sea el id del registro y que el valor sea una concatenación de varias columnas.
Supongamos que tenemos un modelo Property con las columnas name y location, y queremos obtener un array con el siguiente formato:
[ 1 => "Casa en el centro - Buenos Aires", 2 => "Departamento moderno - Córdoba" ]
Podemos lograr esto utilizando mapWithKeys() de Laravel:
$properties = Property::all()->mapWithKeys(fn($p) => [ $p->id => "{$p->name} - {$p->location}" ])->toArray();
Con este enfoque:
Para mejorar el rendimiento, especialmente en bases de datos grandes, podemos reducir las columnas seleccionadas con select() y usar get() en lugar de all():
$properties = Property::select('id', 'name', 'location') ->get() ->mapWithKeys(fn($p) => [$p->id => "{$p->name} - {$p->location}"]) ->toArray();
Este enfoque es útil cuando:
¡Espero que esta solución te ayude en tu próximo proyecto Laravel! 🚀
Me dedico a crear soluciones web eficientes y a compartir mi conocimiento con la comunidad de desarrolladores.