relasi wilayah ekosistem

This commit is contained in:
2026-06-08 13:25:33 +07:00
parent f11be9d288
commit 482c3fc474
11 changed files with 470 additions and 70 deletions
@@ -24,12 +24,13 @@ use App\Models\Core\Program;
class ValueBasisDataController extends Controller
{
private $tableModelClassMap = [
private $tableExceptionModelClassMap = [
'master_provinsi' => \App\Models\Wilayah\Provinsi::class,
'master_kabupaten_kota' => \App\Models\Wilayah\KabupatenKota::class,
'master_kecamatan' => \App\Models\Wilayah\Kecamatan::class,
'master_desa_kelurahan' => \App\Models\Wilayah\DesaKelurahan::class,
];
private $tableModelClassMap = [];
public function index(Request $request, string $tabelId): View
{
@@ -209,14 +210,31 @@ class ValueBasisDataController extends Controller
if ($k->tipe == 'foreign_key') {
$relasi['kolom_id'] = $k->id;
try {
$modelClass = Arr::get($this->tableModelClassMap, $k->relasi_tabel);
if ($modelClass) {
$options_kolom = $modelClass::select($k->relasi_kolom_label . ' as label', $k->relasi_kolom_id . ' as value')->limit(10000);
$exceptionModelClass = Arr::get($this->tableExceptionModelClassMap, $k->relasi_tabel);
if ($exceptionModelClass) {
$relasi['options'] = [];
if ($errors = session('errors')) {
$oldValue = old($k->kolom);
if ($oldValue) {
$option = $exceptionModelClass::where($k->relasi_kolom_id, $oldValue)->first();
if ($option) {
$relasi['options'][] = (object) [
'value' => $option->{$k->relasi_kolom_id},
'label' => $option->{$k->relasi_kolom_label},
];
}
}
}
} else {
$options_kolom = DB::table($k->relasi_tabel)->selectRaw($k->relasi_kolom_label . ' as label, ' . $k->relasi_kolom_id . ' as value')->whereNull('deleted_at')->limit(10000);
$modelClass = Arr::get($this->tableModelClassMap, $k->relasi_tabel);
if ($modelClass) {
$options_kolom = $modelClass::select($k->relasi_kolom_label . ' as label', $k->relasi_kolom_id . ' as value')->limit(10000);
} else {
$options_kolom = DB::table($k->relasi_tabel)->selectRaw($k->relasi_kolom_label . ' as label, ' . $k->relasi_kolom_id . ' as value')->whereNull('deleted_at')->limit(10000);
}
$relasi['options'] = $options_kolom->get();
$relasi['sql'] = $options_kolom->toSql();
}
$relasi['options'] = $options_kolom->get();
$relasi['sql'] = $options_kolom->toSql();
} catch (\Throwable $th) {
$relasi['options'] = [];
}
@@ -242,8 +260,8 @@ class ValueBasisDataController extends Controller
if (!in_array('string', $k->validasi) && ($k->tipe == 'varchar' || $k->tipe == 'text')) {
$rules[$k->kolom][] = 'string';
}
if (!in_array('size', $k->validasi) && ($k->tipe == 'varchar')) {
$rules[$k->kolom][] = 'size:255';
if (!in_array('max', $k->validasi) && ($k->tipe == 'varchar')) {
$rules[$k->kolom][] = 'max:255';
}
if (!in_array('integer', $k->validasi) && $k->tipe == 'integer') {
$rules[$k->kolom][] = 'integer';
@@ -269,7 +287,7 @@ class ValueBasisDataController extends Controller
$rules[$k->kolom][] = 'string';
}
if ($k->tipe == 'varchar') {
$rules[$k->kolom][] = 'size:255';
$rules[$k->kolom][] = 'max:255';
}
if ($k->tipe == 'integer') {
$rules[$k->kolom][] = 'integer';
@@ -464,14 +482,34 @@ class ValueBasisDataController extends Controller
if ($k->tipe == 'foreign_key') {
$relasi['kolom_id'] = $k->id;
try {
$modelClass = Arr::get($this->tableModelClassMap, 'master_desa_kelurahan');
if ($modelClass) {
$options_kolom = $modelClass::select($k->relasi_kolom_label . ' as label', $k->relasi_kolom_id . ' as value')->limit(10000);
$exceptionModelClass = Arr::get($this->tableExceptionModelClassMap, $k->relasi_tabel);
if ($exceptionModelClass) {
$relasi['options'] = [];
if ($errors = session('errors')) {
$oldValue = old($k->kolom);
if ($oldValue) {
$option = $exceptionModelClass::where($k->relasi_kolom_id, $oldValue)->first();
if ($option) {
$relasi['options'][] = (object) [
'value' => $option->{$k->relasi_kolom_id},
'label' => $option->{$k->relasi_kolom_label},
];
}
}
} else {
$options_kolom = $exceptionModelClass::select($k->relasi_kolom_label . ' as label', $k->relasi_kolom_id . ' as value')->limit(10000);
$relasi['options'] = $options_kolom->get();
}
} else {
$options_kolom = DB::table($k->relasi_tabel)->selectRaw($k->relasi_kolom_label . ' as label, ' . $k->relasi_kolom_id . ' as value')->whereNull('deleted_at')->limit(10000);
$modelClass = Arr::get($this->tableModelClassMap, $k->relasi_tabel);
if ($modelClass) {
$options_kolom = $modelClass::select($k->relasi_kolom_label . ' as label', $k->relasi_kolom_id . ' as value')->limit(10000);
} else {
$options_kolom = DB::table($k->relasi_tabel)->selectRaw($k->relasi_kolom_label . ' as label, ' . $k->relasi_kolom_id . ' as value')->whereNull('deleted_at')->limit(10000);
}
$relasi['options'] = $options_kolom->get();
$relasi['sql'] = $options_kolom->toSql();
}
$relasi['options'] = $options_kolom->get();
$relasi['sql'] = $options_kolom->toSql();
} catch (\Throwable $th) {
$relasi['options'] = [];
}