#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