colossus/src/Models/Test.php
2024-06-03 11:41:30 -04:00

67 lines
1.6 KiB
PHP

<?php
namespace BitGoblin\Colossus\Models;
use Illuminate\Database\Eloquent\Model;
class Test extends Model {
protected $fillable = [
'date_tag',
'benchmark_id',
'component_id',
];
public function results() {
return $this->hasMany(Result::class);
}
public function benchmarks() {
return $this->belongsToMany(Benchmark::class);
}
public function component() {
return $this->belongsTo(Component::class);
}
public function benchmarkResults() {
$data = [];
foreach ($this->benchmarks as $i => $b) {
$benchmarkResults = $this->results()->where('benchmark_id', $b->id)->get();
if (count($benchmarkResults) > 0) {
$averageResults = [];
$minimumResults = [];
$maximumResults = [];
foreach ($benchmarkResults as $r) {
array_push($averageResults, $r->average);
array_push($minimumResults, $r->minimum);
array_push($maximumResults, $r->maximum);
}
$data[$i] = [
'name' => $b->name,
'scoring' => $b->scoring,
'count' => count($benchmarkResults),
'average' => (array_sum($averageResults) / count($averageResults)),
'minimum' => (array_sum($minimumResults) / count($minimumResults) ? 1),
'maximum' => (array_sum($maximumResults) / count($maximumResults)),
];
} else {
$data[$i] = [
'name' => $b->name,
'scoring' => $b->scoring,
'count' => count($benchmarkResults),
'average' => 0,
'minimum' => 0,
'maximum' => 0,
];
}
}
return $data;
}
}