Files
alrahma_sunday_school/app/Database/Migrations/2026-01-10-000007_AllowCompetitionWinnerRankTies.php
T

62 lines
1.9 KiB
PHP

<?php
namespace App\Database\Migrations;
use CodeIgniter\Database\Migration;
class AllowCompetitionWinnerRankTies extends Migration
{
public function up()
{
$db = \Config\Database::connect();
if (!$db->tableExists('competition_winners')) {
return;
}
if ($this->indexExists($db, 'competition_winners', 'competition_id_class_section_id_rank')) {
$db->query('DROP INDEX competition_id_class_section_id_rank ON competition_winners');
}
if (! $this->indexExists($db, 'competition_winners', 'competition_id_class_section_id_rank')) {
$db->query(
'CREATE INDEX competition_id_class_section_id_rank ON competition_winners (competition_id, class_section_id, rank)'
);
}
}
public function down()
{
$db = \Config\Database::connect();
if (!$db->tableExists('competition_winners')) {
return;
}
if ($this->indexExists($db, 'competition_winners', 'competition_id_class_section_id_rank')) {
$db->query('DROP INDEX competition_id_class_section_id_rank ON competition_winners');
}
$db->query(
'ALTER TABLE competition_winners ADD UNIQUE KEY competition_id_class_section_id_rank (competition_id, class_section_id, rank)'
);
}
private function indexExists($db, string $table, string $index): bool
{
if (method_exists($db, 'indexExists')) {
return $db->indexExists($table, $index);
}
$dbName = $db->getDatabase();
$builder = $db->table('information_schema.STATISTICS');
$row = $builder
->select('INDEX_NAME')
->where('TABLE_SCHEMA', $dbName)
->where('TABLE_NAME', $table)
->where('INDEX_NAME', $index)
->get()
->getRowArray();
return ! empty($row);
}
}