105 lines
3.1 KiB
PHP
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();
|
|
}
|
|
}
|
|
}
|