97 lines
3.2 KiB
PHP
97 lines
3.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
use Phinx\Migration\AbstractMigration;
|
|
|
|
final class CreateEmployeeJobSubRolesTable extends AbstractMigration
|
|
{
|
|
public function up(): void
|
|
{
|
|
if (!$this->hasTable('employee_job_sub_roles')) {
|
|
$table = $this->table('employee_job_sub_roles', [
|
|
'id' => false,
|
|
'primary_key' => ['id'],
|
|
'signed' => false,
|
|
'collation' => 'utf8mb4_general_ci',
|
|
'encoding' => 'utf8mb4',
|
|
]);
|
|
|
|
$table
|
|
->addColumn('id', 'integer', [
|
|
'identity' => true,
|
|
'signed' => false,
|
|
])
|
|
->addColumn('employee_id', 'integer', [
|
|
'signed' => false,
|
|
'null' => false,
|
|
])
|
|
->addColumn('job_sub_role_id', 'integer', [
|
|
'signed' => false,
|
|
'null' => false,
|
|
])
|
|
->addColumn('is_primary', 'boolean', [
|
|
'null' => false,
|
|
'default' => false,
|
|
])
|
|
->addColumn('created_at', 'timestamp', [
|
|
'null' => true,
|
|
'default' => 'CURRENT_TIMESTAMP',
|
|
])
|
|
->addIndex(['employee_id', 'job_sub_role_id'], [
|
|
'unique' => true,
|
|
'name' => 'uq_employee_subrole',
|
|
])
|
|
->addIndex(['employee_id'], [
|
|
'name' => 'idx_employee_job_sub_roles_employee',
|
|
])
|
|
->addIndex(['job_sub_role_id'], [
|
|
'name' => 'idx_employee_job_sub_roles_subrole',
|
|
])
|
|
->addForeignKey(
|
|
'employee_id',
|
|
'employees',
|
|
'id',
|
|
[
|
|
'delete' => 'CASCADE',
|
|
'update' => 'CASCADE',
|
|
'constraint' => 'fk_employee_job_sub_roles_employee',
|
|
]
|
|
)
|
|
->addForeignKey(
|
|
'job_sub_role_id',
|
|
'job_sub_roles',
|
|
'id',
|
|
[
|
|
'delete' => 'CASCADE',
|
|
'update' => 'CASCADE',
|
|
'constraint' => 'fk_employee_job_sub_roles_subrole',
|
|
]
|
|
)
|
|
->create();
|
|
}
|
|
|
|
// Import existing single sub-role assignments from employees.job_sub_role_id
|
|
// into the new bridge table.
|
|
$this->execute("
|
|
INSERT IGNORE INTO employee_job_sub_roles
|
|
(employee_id, job_sub_role_id, is_primary, created_at)
|
|
SELECT
|
|
e.id,
|
|
e.job_sub_role_id,
|
|
1,
|
|
NOW()
|
|
FROM employees e
|
|
WHERE e.job_sub_role_id IS NOT NULL
|
|
AND e.job_sub_role_id > 0
|
|
");
|
|
}
|
|
|
|
public function down(): void
|
|
{
|
|
if ($this->hasTable('employee_job_sub_roles')) {
|
|
$this->table('employee_job_sub_roles')->drop()->save();
|
|
}
|
|
}
|
|
}
|