Files
lis/htdocs/database/seeders/PoliSeeder.php
T
2026-07-04 05:13:44 +07:00

121 lines
3.4 KiB
PHP

<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
class PoliSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$this->ensureTableAndColumns();
DB::table('poli')->truncate();
foreach (array_chunk($this->jsonData(), 500) as $chunk) {
DB::table('poli')->insert($chunk);
}
$this->resetAutoIncrement();
}
private function ensureTableAndColumns(): void
{
if (!Schema::hasTable('poli')) {
Schema::create('poli', function (Blueprint $table) {
$table->id();
$table->string('poli', 250)->nullable();
$table->string('subpoli', 250)->nullable();
$table->string('subsubpoli', 250)->nullable();
$table->string('modaliti', 150)->nullable();
$table->string('kelompok', 150)->nullable();
$table->string('modaliti2', 150)->nullable();
$table->timestamp('created_at')->useCurrent();
$table->timestamp('updated_at')->useCurrent();
});
return;
}
Schema::table('poli', function (Blueprint $table) {
if (!Schema::hasColumn('poli', 'poli')) {
$table->string('poli', 250)->nullable();
}
if (!Schema::hasColumn('poli', 'subpoli')) {
$table->string('subpoli', 250)->nullable();
}
if (!Schema::hasColumn('poli', 'subsubpoli')) {
$table->string('subsubpoli', 250)->nullable();
}
if (!Schema::hasColumn('poli', 'modaliti')) {
$table->string('modaliti', 150)->nullable();
}
if (!Schema::hasColumn('poli', 'kelompok')) {
$table->string('kelompok', 150)->nullable();
}
if (!Schema::hasColumn('poli', 'modaliti2')) {
$table->string('modaliti2', 150)->nullable();
}
if (!Schema::hasColumn('poli', 'created_at')) {
$table->timestamp('created_at')->useCurrent();
}
if (!Schema::hasColumn('poli', 'updated_at')) {
$table->timestamp('updated_at')->useCurrent();
}
});
}
private function jsonData(): array
{
$path = database_path('seeders/data/poli.json');
$json = file_get_contents($path);
if ($json === false) {
throw new \RuntimeException("Gagal membuka file seeder poli: {$path}");
}
$data = json_decode($json, true);
if (!is_array($data)) {
throw new \RuntimeException("Format JSON seeder poli tidak valid: {$path}");
}
return $data;
}
private function resetAutoIncrement(): void
{
$driver = DB::getDriverName();
if ($driver === 'pgsql') {
DB::statement("
SELECT setval(
pg_get_serial_sequence('poli', 'id'),
(SELECT COALESCE(MAX(id), 1) FROM poli),
(SELECT COUNT(*) > 0 FROM poli)
)
");
return;
}
if ($driver === 'mysql') {
$nextId = ((int) DB::table('poli')->max('id')) + 1;
DB::statement("ALTER TABLE poli AUTO_INCREMENT = {$nextId}");
}
}
}