#1 Tek bir data, satır veya sonuç alınmak isteniyorsa Collection' ile doğrudan ortalaması avg() ile alınabilir.
Formdan geliyorsa collect kullanılabilir.
$average = collect([
['foo' => 10],
['foo' => 10],
['foo' => 20],
...
])->avg('foo');
veya
$average = collect([1, 1, 2, 4])->avg();
Vertiabanından geliyorsa pluck kullanılabilir.
$avarage = $result->pluck('design', 'coding', 'accessibility')->avg() / 5;
#2 Veritabanından birden fazla satır geliyorsa Eloquent sorgusunda selectRaw ile raw query yazabilirsin. Örneğin
$myModel->selectRaw('ratings.*, (AVG(design + coding + accessibility + ...) / 5) AS my_avg')
->take(10)
->get()...
şeklinde gidebilirsin.
#2.1 Bunu raw query yerine sorgu sonucunu Colletion map() methodu ile tek tek hesaplatabilirsin. Hesaplarken yine 1. yolu kullanabilirsin.
$myModel->latest()
->get()
->map(function($item){
$item->avg = $item->pluck('design', 'coding', 'accessibility')->avg() / 5;
return $item;
});
Kodlardan %100 emin değilim ama mantık bu şekilde olmalı.