calculate average of laravel notes

-1

I have a table Notes (id, id_matricula, id_evaluación, nota)

Through my controller I send the notes of a student logged in:

public function calificaciones($id) 
{  
    $alumno = Alumno::find(auth('alumno')->user()->id);
    $asignatura = Asignatura::find($id);
    $evaluaciones = $asignatura->evaluaciones;
    $matricula = Matricula::where('id_alumno','=',$alumno->id)->get()->last();

    $notas = array();
    foreach ($asignatura->notas as $nota) 
    {
        if (!isset($notas[$nota->id_matricula]))
        {
            $notas[$nota->id_matricula] = array();
        }

        $notas[$nota->id_matricula][$nota->id_evaluacion] = $nota->nota;
    }


    return view('datos-alumno.calificaciones')->with('alumno',$alumno)->with('matricula',$matricula)->with('asignatura',$asignatura)->with('evaluaciones',$evaluaciones)->with('notas',$notas);
}

looks like this:

This is the view:

<table class="table table-bordered">               
<tr>

    @foreach ($evaluaciones as $e)
      <th width="10">{{$e->nombre}} <a href="" data-target="#modal-show-{{ $e->id }}"" data-toggle="modal" class="btn-xs btn-info"> <span class="fa fa-info" aria-hidden="true"></span></a></th>
      @include('datos-alumno.modal') 
    @endforeach
  <th width="100">Promedio </th>
</tr>

<tr>

    @for($i=0, $length = count($evaluaciones); $i < $length; $i++)
      <td><input class="nota" disabled type="text" data-id-matricula="{{ $matricula->id }}" data-id-evaluacion="{{ $evaluaciones[$i]->id }}" value="{{ (isset($notas[$matricula->id]))? (isset($notas[$matricula->id][$evaluaciones[$i]->id]))?$notas[$matricula->id][$evaluaciones[$i]->id]: 1.0 : 1.0 }}"/></td>
    @endfor
  <td></td>
</tr>

How could I do that to calculate that average? I was trying with

$promedio = DB::table('notas')
    ->select(sum('notas')/count($evaluaciones))
    ->where('id_matricula',$matricula->id)
    ->get();
    
asked by Edgardo Escobar 19.06.2017 в 23:21
source

1 answer

0

You can calculate the average in the foreach adding the notes and at the end of the foreach divide the sum between the number of evaluations and return the average in sight. I added it to your code but I did not verify that it worked since I do not have the tables. I hope it helps you.

public function calificaciones($id)
{
    $alumno = Alumno::find(auth('alumno')->user()->id);
    $asignatura = Asignatura::find($id);
    $evaluaciones = $asignatura->evaluaciones;
    $matricula = Matricula::where('id_alumno','=',$alumno->id)->get()->last();

    $notas = array();
    $promedios = array();
    foreach ($asignatura->notas as $nota)
    {
        if (!isset($notas[$nota->id_matricula]))
        {
            $notas[$nota->id_matricula] = array();
        }

        $notas[$nota->id_matricula][$nota->id_evaluacion] = $nota->nota;

        if (!isset($promedios[$nota->id_matricula]))
        {
            $promedios[$nota->id_matricula]["promedio"] = 0;
            $promedios[$nota->id_matricula]["numero_evaluaciones"] = 0;
        }
        $promedios[$nota->id_matricula]["promedio"] += $nota->nota;
        $promedios[$nota->id_matricula]["numero_evaluaciones"]++;
    }


    foreach ($promedios as $key => $value)
    {
        $promedios[$key]["promedio"] /= $promedios[$key]["numero_evaluaciones"];
    }


    return view('datos-alumno.calificaciones')->with('alumno',$alumno)->with('matricula',$matricula)->with('asignatura',$asignatura)->with('evaluaciones',$evaluaciones)->with('notas',$notas)->with('promedios',$promedios);
}
    
answered by 20.06.2017 в 05:07