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"; } }