Bagian 5 dari seri
Perhitungan Nilai Akhir dan Ranking AHP Laravel
Diterbitkan 18 September 2026
Rumus Nilai Akhir
Nilai akhir setiap alternatif dihitung dari:
Nilai Akhir =
Σ (Bobot Kriteria × Bobot Alternatif pada Kriteria)
Buat Controller
php artisan make:controller HasilController
app/Http/Controllers/HasilController.php:
<?php
namespace App\Http\Controllers;
use App\Models\Alternatif;
use App\Models\Kriteria;
use App\Models\PerbandinganAlternatif;
use App\Models\PerbandinganKriteria;
use App\Services\AhpService;
use Illuminate\Support\Facades\DB;
class HasilController extends Controller
{
public function index(AhpService $ahp)
{
$kriteria = Kriteria::orderBy('kode')->get();
$alternatif = Alternatif::orderBy('kode')->get();
abort_if(
$kriteria->count() < 2 || $alternatif->count() < 2,
422,
'Minimal diperlukan dua kriteria dan dua alternatif.'
);
$kriteriaIds = $kriteria->pluck('id')->all();
$alternatifIds = $alternatif->pluck('id')->all();
$recordsKriteria = PerbandinganKriteria::all();
$matrixKriteria = $ahp->matrix(
$kriteriaIds,
$recordsKriteria,
'kriteria_1_id',
'kriteria_2_id'
);
$hasilKriteria = $ahp->priority(
$matrixKriteria,
$kriteriaIds
);
$konsistensiKriteria = $ahp->consistency(
$matrixKriteria,
$hasilKriteria['weights'],
$kriteriaIds
);
abort_if(
$konsistensiKriteria['cr'] > 0.1,
422,
'Perbandingan kriteria belum konsisten.'
);
$bobotAlternatif = [];
foreach ($kriteria as $itemKriteria) {
$records = PerbandinganAlternatif::where(
'kriteria_id',
$itemKriteria->id
)->get();
$matrix = $ahp->matrix(
$alternatifIds,
$records,
'alternatif_1_id',
'alternatif_2_id'
);
$hasil = $ahp->priority(
$matrix,
$alternatifIds
);
$konsistensi = $ahp->consistency(
$matrix,
$hasil['weights'],
$alternatifIds
);
abort_if(
$konsistensi['cr'] > 0.1,
422,
"Perbandingan alternatif pada {$itemKriteria->kode} belum konsisten."
);
$bobotAlternatif[$itemKriteria->id] = $hasil['weights'];
}
$nilaiAkhir = [];
foreach ($alternatifIds as $alternatifId) {
$nilaiAkhir[$alternatifId] = 0;
foreach ($kriteriaIds as $kriteriaId) {
$nilaiAkhir[$alternatifId] +=
$hasilKriteria['weights'][$kriteriaId]
* $bobotAlternatif[$kriteriaId][$alternatifId];
}
}
arsort($nilaiAkhir);
DB::transaction(function () use ($nilaiAkhir) {
$ranking = 1;
foreach ($nilaiAkhir as $alternatifId => $nilai) {
Alternatif::whereKey($alternatifId)->update([
'nilai_akhir' => $nilai,
'ranking' => $ranking++,
]);
}
});
$ranking = Alternatif::orderBy('ranking')->get();
return view('hasil.index', compact(
'ranking',
'kriteria',
'hasilKriteria',
'bobotAlternatif'
));
}
}
Route
Tambahkan pada grup auth:
use App\Http\Controllers\HasilController;
Route::get('/hasil', [HasilController::class, 'index'])
->name('hasil.index');
View Ranking
Buat resources/views/hasil/index.blade.php:
@extends('layouts.app')
@section('title', 'Hasil AHP')
@section('content')
<h1 class="h4 mb-3">Hasil Ranking AHP</h1>
<div class="card border-0 shadow-sm mb-4">
<div class="card-body">
<div class="table-responsive">
<table class="table table-bordered table-striped align-middle">
<thead>
<tr>
<th width="100">Ranking</th>
<th>Kode</th>
<th>Alternatif</th>
<th>Nilai Akhir</th>
</tr>
</thead>
<tbody>
@foreach($ranking as $item)
<tr>
<td>
<span class="badge text-bg-primary">
{{ $item->ranking }}
</span>
</td>
<td>{{ $item->kode }}</td>
<td>{{ $item->nama }}</td>
<td>{{ number_format($item->nilai_akhir, 8) }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
<div class="card border-0 shadow-sm">
<div class="card-body">
<h2 class="h5">Bobot Kriteria</h2>
<table class="table table-bordered mb-0">
<thead>
<tr>
<th>Kriteria</th>
<th>Bobot</th>
</tr>
</thead>
<tbody>
@foreach($kriteria as $item)
<tr>
<td>{{ $item->kode }} - {{ $item->nama }}</td>
<td>
{{ number_format(
$hasilKriteria['weights'][$item->id],
6
) }}
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
@endsection
Tambahkan Menu Hasil
Pada navbar:
<a class="nav-link text-white" href="{{ route('hasil.index') }}">
Hasil Ranking
</a>
Hasil
Ketika halaman hasil dibuka, aplikasi akan:
- Menghitung bobot kriteria.
- Memeriksa konsistensi kriteria.
- Menghitung bobot alternatif pada setiap kriteria.
- Memeriksa konsistensi masing-masing matriks alternatif.
- Mengalikan bobot kriteria dengan bobot alternatif.
- Menjumlahkan nilai setiap alternatif.
- Mengurutkan hasil dari nilai terbesar.
- Menyimpan
nilai_akhirdanrankingke tabelalternatif.

Pengujian Akhir
Pastikan:
- Login dan logout berjalan.
- CRUD kriteria berjalan.
- CRUD alternatif berjalan.
- Perbandingan kriteria tersimpan.
- CR kriteria ≤ 0,1.
- Perbandingan alternatif tersedia pada seluruh kriteria.
- CR alternatif pada setiap kriteria ≤ 0,1.
- Nilai akhir tersimpan pada tabel alternatif.
- Ranking ditampilkan dari nilai terbesar ke terkecil.
Selesai
Aplikasi AHP Laravel sudah memiliki alur lengkap mulai dari data master, matriks perbandingan, pengujian konsistensi, sampai ranking akhir.
Kembali ke Tutorial AHP Laravel




