Files
zibo-dashboard/db/migrations/20260603183520_create_job_sub_roles_table.php
T
2026-06-05 14:50:51 +02:00

105 lines
3.1 KiB
PHP

<?php
declare(strict_types=1);
use Phinx\Migration\AbstractMigration;
final class AddJobSubRoleIdToEmployeesTable extends AbstractMigration
{
public function up(): void
{
if (!$this->hasTable('employees')) {
throw new RuntimeException('Table employees does not exist.');
}
$table = $this->table('employees');
if (!$table->hasColumn('job_role_id')) {
$table
->addColumn('job_role_id', 'integer', [
'signed' => false,
'null' => true,
'after' => 'department_id',
])
->addIndex(['job_role_id'], [
'name' => 'idx_employees_job_role_id',
])
->addForeignKey(
'job_role_id',
'job_roles',
'id',
[
'delete' => 'SET_NULL',
'update' => 'CASCADE',
'constraint' => 'fk_employees_job_role',
]
)
->update();
}
$table = $this->table('employees');
if (!$table->hasColumn('job_sub_role_id')) {
$afterColumn = $table->hasColumn('job_role_id') ? 'job_role_id' : 'department_id';
$table
->addColumn('job_sub_role_id', 'integer', [
'signed' => false,
'null' => true,
'after' => $afterColumn,
])
->addIndex(['job_sub_role_id'], [
'name' => 'idx_employees_job_sub_role_id',
])
->addForeignKey(
'job_sub_role_id',
'job_sub_roles',
'id',
[
'delete' => 'SET_NULL',
'update' => 'CASCADE',
'constraint' => 'fk_employees_job_sub_role',
]
)
->update();
}
}
public function down(): void
{
if (!$this->hasTable('employees')) {
return;
}
$table = $this->table('employees');
if ($table->hasForeignKey('job_sub_role_id')) {
$table->dropForeignKey('job_sub_role_id')->update();
}
if ($table->hasForeignKey('job_role_id')) {
$table->dropForeignKey('job_role_id')->update();
}
$table = $this->table('employees');
if ($table->hasIndexByName('idx_employees_job_sub_role_id')) {
$table->removeIndexByName('idx_employees_job_sub_role_id')->update();
}
if ($table->hasIndexByName('idx_employees_job_role_id')) {
$table->removeIndexByName('idx_employees_job_role_id')->update();
}
$table = $this->table('employees');
if ($table->hasColumn('job_sub_role_id')) {
$table->removeColumn('job_sub_role_id')->update();
}
if ($table->hasColumn('job_role_id')) {
$table->removeColumn('job_role_id')->update();
}
}
}