> Faqs > Consulta con distinct en Laravel Eloquent

Consulta con distinct en Laravel Eloquent

Quiero hacer una consulta por distinct en Laravel Eloquent.

Tengo una tabla con tareas donde han participado los usuarios con su correspondiente modelo Task. Luego tengo un registro del tiempo usado en una tarea, que la relaciona con el usuario.

Cómo acceder con distinct a las tareas que un usuario ha participado?

Hago esto:

$distinctTasks = TaskDailyTracking::where('user_id', '=', $userToReport->id)->get();

Pero cada tarea puede aparecer varias veces en este listado y quiero solamente obtener los identificadores de las tareas donde el usuario ha participado.

Respuestas

Para hacer una consulta con distinct y traterte todos esos identificadores, tienes dos partes.

  • Primero que seleccionar el campo que necesitas
  • Luego hacer el uso del método distinct() del query builder de Laravel Eloquent.
$distinctTasks = TaskDailyTracking::select('task_id')->distinct('course_id')->where('user_id', '=', $userToReport->id)->get();

Luego, si solamente quieres una colección con los identificadores de las tareas, en vez de la colección con los modelos TaskDailyTracking, podrías usar el método pluck() de las colecciones:

$distinctTasks = TaskDailyTracking::select('task_id')->distinct('course_id')->where('user_id', '=', $userToReport->id)->get()->pluck('task_id);

Eso es todo, pero ten en cuenta que para que distinct te funcione en este caso solamente tienes que traerte el 'task_id' al hacer el select().

Julian
1100 46 84 45
Ya entiendo cómo aplicar el el distinct, ha funcionado bien. Gracias!