50 lines
1.4 KiB
PHP
50 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace App\Database\Migrations;
|
|
|
|
use CodeIgniter\Database\Migration;
|
|
|
|
class FixPrintRequestsForeignKeyAgain extends Migration
|
|
{
|
|
public function up()
|
|
{
|
|
if (! $this->db->tableExists('print_requests') || ! $this->db->tableExists('classSection')) {
|
|
return;
|
|
}
|
|
|
|
$db = \Config\Database::connect();
|
|
$keys = $db->getForeignKeyData('print_requests');
|
|
foreach ($keys as $key) {
|
|
if ($key->constraint_name === 'print_requests_class_id_foreign') {
|
|
return;
|
|
}
|
|
}
|
|
|
|
$orphanCount = (int) $db->table('print_requests pr')
|
|
->join('classSection cs', 'cs.class_id = pr.class_id', 'left')
|
|
->where('pr.class_id IS NOT NULL', null, false)
|
|
->where('cs.class_id IS NULL', null, false)
|
|
->countAllResults();
|
|
|
|
if ($orphanCount > 0) {
|
|
return;
|
|
}
|
|
|
|
$this->forge->addForeignKey('class_id', 'classSection', 'class_id', 'CASCADE', 'CASCADE');
|
|
$this->forge->processIndexes('print_requests');
|
|
}
|
|
|
|
public function down()
|
|
{
|
|
if (! $this->db->tableExists('print_requests')) {
|
|
return;
|
|
}
|
|
|
|
try {
|
|
$this->forge->dropForeignKey('print_requests', 'print_requests_class_id_foreign');
|
|
} catch (\Throwable $e) {
|
|
// Already absent.
|
|
}
|
|
}
|
|
}
|