Ejemplo Práctico
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"
]Solución con Eloquent
Podemos lograr esto utilizando mapWithKeys() de Laravel:
$properties = Property::all()->mapWithKeys(fn($p) => [
$p->id => "{$p->name} - {$p->location}"
])->toArray();Con este enfoque:
- Se obtiene toda la colección de registros.
- Se mapea la colección convirtiéndola en un array asociativo donde el id es la clave y el valor es la concatenación de las columnas.
- Se usa toArray() para convertir la colección en un array puro.
Optimizando la Consulta
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();¿Cuándo Usar Este Método?
Este enfoque es útil cuando:
- Necesitás transformar una colección en un array clave-valor.
- Querés mostrar opciones en un select HTML.
- Estás generando datos estructurados para una API o frontend.
¡Espero que esta solución te ayude en tu próximo proyecto Laravel! 🚀