es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Contar un modelo basado en otro modelo con una relación de muchos a muchos.

Aquí está mi tarea:

class Tarea extends Model
{
    public function piezas()
    {
        return $this
            ->belongsToMany(Pieza::class)
            ->withPivot('cantidad');
    }
}

Usando Eloquent, ¿cómo puedo verificar cuántas piezas se utilizaron para las tareas que tienen una fecha de finalización entre X e Y? Quiero listar todas las piezas al mismo tiempo, ya que solo hay varios tipos.

Hasta ahora tengo esto:

collect(
    TareaProyecto::with('piezas')
        ->has('piezas')
        ->where('fecha_fin', '>=', $ahora)
        ->where('fecha_fin', '<=', $hasta)
        ->get()
)

pero no tengo idea de qué hacer a continuación.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener el total de todas las partes utilizadas en todas las tareas que tengan una fecha de finalización entre X e Y, puedes utilizar las funciones groupBy y sum. Aquí tienes un ejemplo de consulta:

    $partsCount = Part::select('parts.id', 'parts.name', DB::raw('SUM(task_part.count) as total'))
        ->join('task_part', 'parts.id', '=', 'task_part.part_id')
        ->join('tasks', 'task_part.task_id', '=', 'tasks.id')
        ->where('tasks.end_date', '>=', $now)
        ->where('tasks.end_date', '<=', $to)
        ->groupBy('parts.id')
        ->orderBy('parts.name')
        ->get();
    

    Esto te dará una colección con el id, nombre y total de cada parte utilizada en las tareas que cumplen con los criterios de fecha. Luego puedes recorrer esta colección para mostrar la información:

    @foreach($partsCount as $part)
        {{ $part->name }} - {{ $part->total }}
    @endforeach
    

Comments are closed.