Merge pull request 'feat(migration): add parent_id column and foreign key to branches table with checks' (#7) from shola into master
Reviewed-on: #7
This commit was merged in pull request #7.
This commit is contained in:
@@ -3,18 +3,30 @@
|
|||||||
use Illuminate\Database\Migrations\Migration;
|
use Illuminate\Database\Migrations\Migration;
|
||||||
use Illuminate\Database\Schema\Blueprint;
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
use Illuminate\Support\Facades\Schema;
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
return new class extends Migration
|
return new class extends Migration {
|
||||||
{
|
|
||||||
/**
|
/**
|
||||||
* Run the migrations.
|
* Run the migrations.
|
||||||
*/
|
*/
|
||||||
public function up(): void
|
public function up(): void
|
||||||
{
|
{
|
||||||
Schema::table('branches', function (Blueprint $table) {
|
Schema::table('branches', function (Blueprint $table) {
|
||||||
$table->unsignedBigInteger('parent_id')->nullable()->after('name');
|
// Tambah kolom parent_id jika belum ada
|
||||||
$table->foreign('parent_id')->references('id')->on('branches')->onDelete('set null');
|
if (!Schema::hasColumn('branches', 'parent_id')) {
|
||||||
|
$table->unsignedBigInteger('parent_id')->nullable()->after('name');
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Tambah foreign key jika belum ada
|
||||||
|
if (!$this->foreignKeyExists('branches', 'branches_parent_id_foreign')) {
|
||||||
|
Schema::table('branches', function (Blueprint $table) {
|
||||||
|
$table->foreign('parent_id', 'branches_parent_id_foreign')
|
||||||
|
->references('id')
|
||||||
|
->on('branches')
|
||||||
|
->onDelete('set null');
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -22,9 +34,39 @@ return new class extends Migration
|
|||||||
*/
|
*/
|
||||||
public function down(): void
|
public function down(): void
|
||||||
{
|
{
|
||||||
|
// Drop foreign key jika ada
|
||||||
|
if ($this->foreignKeyExists('branches', 'branches_parent_id_foreign')) {
|
||||||
|
Schema::table('branches', function (Blueprint $table) {
|
||||||
|
$table->dropForeign('branches_parent_id_foreign');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Drop kolom jika ada
|
||||||
Schema::table('branches', function (Blueprint $table) {
|
Schema::table('branches', function (Blueprint $table) {
|
||||||
$table->dropForeign(['parent_id']);
|
if (Schema::hasColumn('branches', 'parent_id')) {
|
||||||
$table->dropColumn('parent_id');
|
$table->dropColumn('parent_id');
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cek apakah foreign key exists
|
||||||
|
*/
|
||||||
|
private function foreignKeyExists(string $table, string $name): bool
|
||||||
|
{
|
||||||
|
$conn = Schema::getConnection();
|
||||||
|
$dbName = $conn->getDatabaseName();
|
||||||
|
|
||||||
|
$result = DB::select(
|
||||||
|
"SELECT CONSTRAINT_NAME
|
||||||
|
FROM information_schema.TABLE_CONSTRAINTS
|
||||||
|
WHERE TABLE_SCHEMA = ?
|
||||||
|
AND TABLE_NAME = ?
|
||||||
|
AND CONSTRAINT_NAME = ?
|
||||||
|
AND CONSTRAINT_TYPE = 'FOREIGN KEY'",
|
||||||
|
[$dbName, $table, $name]
|
||||||
|
);
|
||||||
|
|
||||||
|
return count($result) > 0;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user