использование функции sum в пользовательской функции в laravel

#laravel

Вопрос:

у меня есть пользовательская функция в моей модели

 public function bkd(){
        $sifat = 0;
        $sks = $this->sks;
        $bkd = 0;
        if($this->sifat == 'Team Teaching'){
            $sifat = 0.5;
            $bkd = $sifat * $sks;
            return $bkd;
        }elseif($this->sifat == 'Asistensi'){
            $sifat = 1;
            $bkd = $sifat * $sks;
            return $bkd;
        }
    }
 

и с этого момента он будет вызываться в таблице в представлении с помощью foreach.

 @foreach($profil->kelas as $kls)
          <tr>
          <th scope="row">{{ $loop->iteration }}</th>
          <td>{{ $kls->matakuliah->nama}}</th>
          <td>{{ $kls->grup}}</td>
          <td>{{ $kls->sifat}}</td>
          <td>{{ $kls->sks}}</td>
          <td>{{ $kls->semester}}</td>
          <td>{{ $kls->tahun_ajaran}}</td>
          <td>{{ $kls->bkd()}}</td>
          <td>
              <a href="/dosen/{{$profil->id}}/{{$kls->id}}/del_kelas" class="badge badge-danger" onclick="return confirm('Yakin Ingin Menghapus?')">DELETE</a>
          </td>
          </tr>
      @endforeach
 

Я хочу суммировать каждую запись из функции bkd(), как я могу это сделать?

это то, что я пытаюсь сделать в представлении

 <li>Jumlah Beban Pengajaran di Sistem Informasi<span>{{$kelas->sum('bkd')}}</span></li>
 

но это дает мне ошибку

AppKelas::bkd должен возвращать экземпляр отношения.

Комментарии:

1. Вы не можете сделать это так ->sum('bkd') , поскольку bkd это не является ни свойством, ни методом отношений. Вы можете выполнить цикл и назначить переменную, например $bkds = 0; , затем в цикле $bkds = $kls->bkd(); , но да; ->sum() не работает с этим типом метода.

2. Средство доступа было бы лучше, чем эта функция, но вы все равно можете выполнить суммирование с помощью метода reduce $profil->kelas->reduce(function ($carry, $item) { return $carry $item->bkd(); }, 0)

Ответ №1:

Это сработает, если вы используете accesor:

 class YourModel
{
    protected $appends = ['bkd'];
    public function getBkdAttribute()
    {
      //stuff
    }
}
$kls->bkd; //value
$kelas->sum('bkd'); //sum of values