135 lines
5.5 KiB
PHP
135 lines
5.5 KiB
PHP
<?php
|
|
|
|
namespace Database\Seeders;
|
|
|
|
use Illuminate\Database\Seeder;
|
|
use App\Models\MobilModels as Mobil;
|
|
use App\Models\SubKriteriaModels as SubKriteria;
|
|
use App\Models\NilaiAlternatifModels as NilaiAlternatif;
|
|
|
|
class NilaiAlternatifSeeder extends Seeder
|
|
{
|
|
public function run()
|
|
{
|
|
$mobils = Mobil::all();
|
|
|
|
// ===============================
|
|
// 1. KELENGKAPAN MOBIL
|
|
// ===============================
|
|
$kelengkapanItems = ['ban cadangan', 'dongkrak', 'kunci roda', 'segitiga pengaman', 'apar'];
|
|
|
|
$subKelengkapan = [];
|
|
foreach ($kelengkapanItems as $item) {
|
|
$sub = SubKriteria::whereRaw('LOWER(nama_subkriteria) LIKE ?', ["%$item%"])->first();
|
|
if ($sub) {
|
|
$subKelengkapan[strtolower($item)] = $sub->id;
|
|
}
|
|
}
|
|
|
|
// ===============================
|
|
// 2. SUB-KRITERIA HARGA
|
|
// ===============================
|
|
$subHarga = SubKriteria::whereHas('kriteria', function ($q) {
|
|
$q->where('nama_kriteria', 'Harga Sewa');
|
|
})->get()->keyBy(function ($item) {
|
|
return strtolower($item->nama_subkriteria);
|
|
});
|
|
|
|
$hargaMap = [
|
|
['label' => '≤ rp 300.000', 'check' => fn($v) => $v <= 300000, 'score' => 5],
|
|
['label' => 'rp 301.000 - rp 400.000', 'check' => fn($v) => $v > 300000 && $v <= 400000, 'score' => 4],
|
|
['label' => 'rp 401.000 - rp 600.000', 'check' => fn($v) => $v > 400000 && $v <= 600000, 'score' => 3],
|
|
['label' => 'rp 601.000 - rp 1.000.000', 'check' => fn($v) => $v > 600000 && $v <= 1000000, 'score' => 2],
|
|
['label' => '≥ rp 1.000.000', 'check' => fn($v) => $v > 1000000, 'score' => 1],
|
|
];
|
|
|
|
// ===============================
|
|
// 3. SUB-KRITERIA BBM
|
|
// ===============================
|
|
$subBBM = SubKriteria::whereHas('kriteria', function ($q) {
|
|
$q->where('nama_kriteria', 'Konsumsi BBM');
|
|
})->get()->keyBy(function ($item) {
|
|
return strtolower($item->nama_subkriteria);
|
|
});
|
|
|
|
$bbmMap = [
|
|
['label' => 'sangat Hemat (≥16 km/l)', 'check' => fn($v) => $v >= 16, 'score' => 5],
|
|
['label' => 'hemat (14 - 15 km/l)', 'check' => fn($v) => $v >= 14 && $v < 16, 'score' => 4],
|
|
['label' => 'sedang (12 - 13 km/l)', 'check' => fn($v) => $v >= 12 && $v < 14, 'score' => 3],
|
|
['label' => 'boros (10 - 11 km/l)', 'check' => fn($v) => $v >= 10 && $v < 12, 'score' => 2],
|
|
['label' => 'sangat Boros (≤ 10 km/l)', 'check' => fn($v) => $v < 10, 'score' => 1],
|
|
];
|
|
|
|
// ===============================
|
|
// 4. SUB-KRITERIA TAHUN
|
|
// ===============================
|
|
$subTahun = SubKriteria::whereHas('kriteria', function ($q) {
|
|
$q->where('nama_kriteria', 'Tahun Mobil');
|
|
})->get()->keyBy(function ($item) {
|
|
return strtolower($item->nama_subkriteria);
|
|
});
|
|
|
|
$tahunMap = [
|
|
['label' => 'terbaru (2022 - 2024)', 'check' => fn($v) => $v >= 2022, 'score' => 5],
|
|
['label' => 'menengah (2020 - 2021)', 'check' => fn($v) => $v >= 2020 && $v < 2022, 'score' => 3],
|
|
['label' => 'lama (2018 - 2019)', 'check' => fn($v) => $v >= 2018 && $v < 2020, 'score' => 1],
|
|
];
|
|
|
|
// ===============================
|
|
// MASUKKAN NILAI
|
|
// ===============================
|
|
foreach ($mobils as $mobil) {
|
|
$kelengkapanList = array_map('trim', explode(',', strtolower($mobil->kelengkapan_mobil)));
|
|
foreach ($kelengkapanItems as $item) {
|
|
$key = strtolower($item);
|
|
$nilai = in_array($key, $kelengkapanList) ? 1 : 0;
|
|
if (isset($subKelengkapan[$key])) {
|
|
NilaiAlternatif::updateOrCreate([
|
|
'mobil_id' => $mobil->id,
|
|
'sub_kriteria_id' => $subKelengkapan[$key],
|
|
], ['nilai' => $nilai]);
|
|
}
|
|
}
|
|
|
|
$harga = (int) preg_replace('/[^\d]/', '', $mobil->harga_sewa_per_hari);
|
|
foreach ($hargaMap as $item) {
|
|
$key = strtolower($item['label']);
|
|
if ($item['check']($harga) && isset($subHarga[$key])) {
|
|
NilaiAlternatif::updateOrCreate([
|
|
'mobil_id' => $mobil->id,
|
|
'sub_kriteria_id' => $subHarga[$key]->id,
|
|
], ['nilai' => $item['score']]);
|
|
break; // cukup satu yang cocok
|
|
}
|
|
}
|
|
|
|
|
|
$bbm = (float) $mobil->konsumsi_bbm;
|
|
foreach ($bbmMap as $item) {
|
|
$key = strtolower($item['label']);
|
|
if ($item['check']($bbm) && isset($subBBM[$key])) {
|
|
NilaiAlternatif::updateOrCreate([
|
|
'mobil_id' => $mobil->id,
|
|
'sub_kriteria_id' => $subBBM[$key]->id,
|
|
], ['nilai' => $item['score']]);
|
|
break;
|
|
}
|
|
}
|
|
|
|
$tahun = (int) $mobil->tahun;
|
|
foreach ($tahunMap as $item) {
|
|
$key = strtolower($item['label']);
|
|
if ($item['check']($tahun) && isset($subTahun[$key])) {
|
|
NilaiAlternatif::updateOrCreate([
|
|
'mobil_id' => $mobil->id,
|
|
'sub_kriteria_id' => $subTahun[$key]->id,
|
|
], ['nilai' => $item['score']]);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
echo "Seeder lengkap selesai.\n";
|
|
}
|
|
}
|