Volver a la página principal
miércoles 20 noviembre 2024
47

Cómo obtener los atributos de un modelo con distinct en Laravel

En Laravel, el método distinct permite obtener valores únicos de una columna específica de una tabla de base de datos. Esto es útil para evitar duplicados en los resultados al trabajar con modelos de Eloquent o consultas con el constructor de consultas (Query Builder).

Uso de distinct en Laravel

El método distinct se utiliza junto con select para especificar las columnas que deben ser consideradas en la consulta. Devuelve únicamente los valores únicos para esas columnas.

Ejemplo básico con Query Builder

use Illuminate\Support\Facades\DB;

$categorias = DB::table('productos')
                ->select('categoria')
                ->distinct()
                ->get();

En este ejemplo:

  • Se seleccionan valores únicos de la columna categoria de la tabla productos.
  • El resultado será una colección de valores únicos.

Uso con Eloquent

Cuando trabajas con un modelo de Eloquent, puedes utilizar distinct de manera similar:

$categorias = Producto::select('categoria')
                      ->distinct()
                      ->get();

En este caso:

  • Producto es el modelo que representa la tabla productos.
  • El resultado será una colección de objetos con valores únicos en la columna categoria.

Obtener múltiples columnas con distinct

Si necesitas obtener valores únicos combinando varias columnas, puedes incluirlas en el select:

$datosUnicos = Producto::select('categoria', 'marca')
                       ->distinct()
                       ->get();

Este ejemplo devuelve combinaciones únicas de las columnas categoria y marca.

Filtrar con condiciones adicionales

Puedes combinar distinct con cláusulas where para aplicar condiciones:

$categoriasActivas = Producto::select('categoria')
                             ->distinct()
                             ->where('activo', true)
                             ->get();

Aquí se seleccionan categorías únicas de productos cuyo atributo activo sea true.

Uso de pluck para listas simples

Si solo necesitas una lista simple de valores únicos de una columna, puedes usar pluck:

$categorias = Producto::distinct()
                      ->pluck('categoria');

El método pluck devuelve una colección con los valores de la columna especificada.

Ejemplo práctico completo

Supongamos que tienes una tabla productos con las siguientes columnas: id, nombre, categoria, y marca. Quieres obtener todas las categorías únicas de productos activos:

use App\Models\Producto;

$categoriasActivas = Producto::select('categoria')
                             ->distinct()
                             ->where('activo', true)
                             ->get();

foreach ($categoriasActivas as $categoria) {
    echo $categoria->categoria . "\n";
}

Notas importantes

1. Ordenar los resultados:

Puedes usar orderBy para ordenar los valores únicos:

$categorias = Producto::select('categoria')
                         ->distinct()
                         ->orderBy('categoria', 'asc')
                         ->get();

2. Considerar rendimiento:

Cuando trabajas con tablas grandes, combinar distinct con índices adecuados en la base de datos mejora significativamente el rendimiento.

3. Consulta en SQL:

Laravel traduce estas consultas a SQL estándar como:

SELECT DISTINCT categoria FROM productos;

Recursos adicionales

Para más información sobre el uso de distinct y otras consultas avanzadas en Laravel, puedes consultar la documentación oficial de Eloquent.

Etiquetas:
php laravel
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer