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
).
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.
use Illuminate\Support\Facades\DB;
$categorias = DB::table('productos')
->select('categoria')
->distinct()
->get();
En este ejemplo:
categoria
de la tabla productos
.
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
.
categoria
.
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
.
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
.
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.
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";
}
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;
Para más información sobre el uso de distinct
y otras consultas avanzadas en Laravel, puedes consultar la documentación oficial de Eloquent.
Jorge García
Fullstack developer