Невозможно усечь таблицу, указанную в ограничении внешнего ключа в Codeigniter - PullRequest
0 голосов
/ 17 мая 2018

Я делаю сеялку БД, используя CodeIgniter

, вот код

class AreasSeeder extends Seeder {

private $table = 'areas';

public function run() {
    $this->db->truncate($this->table);

    $data = [
        [
            'name' => 'area1'
        ],
        [
            'name' => 'area2'
        ]
    ];

    $this->db->insert_batch($this->table, $data);

    echo PHP_EOL;
    }
}

, когда он запускает эту ошибку отображения

Error Number: 1701
    Cannot truncate a table referenced in a foreign key constraint (`myproject`.`area_pref_relations`, CONSTRAINT `area_pref_relations_ibfk_1` FOREIGN KEY (`area_id`) REFERENCES `myproject`.`areas` (`id`))
    TRUNCATE `areas`
    Filename: database/seeds/areaSeeder.php
    Line Number: 8

нужно ли мнесбросить все таблицы, связанные с областями таблицы?

1 Ответ

0 голосов
/ 17 мая 2018

Это не относится к CodeIgniter.

Это ограничение MySQL.Вместо этого используйте оператор DELETE (при условии, что ни строки внешнего ключа не ссылаются на строки в таблице, из которой мы удаляем строки, либо определены ограничения внешнего ключа ON DELETE CASCADE или ON DELETE SET NULL.

DELETE FROM `areas`;

Если мы хотим использовать TRUNCATE, нам нужно будет отключить ограничения внешнего ключа. Либо удалите ключевые ограничения, которые ссылаются на таблицу, затем выполните TRUNCATE для таблицы и воссоздайте ограничение внешнего ключа.).

ALTER TABLE `myproject`.`area_pref_relations` 
  DROP FOREIGN KEY `area_pref_relations_ibfk_1` ; 

TRUNCATE TABLE `areas` ;

ALTER TABLE `myproject`.`area_pref_relations` 
  ADD CONSTRAINT `area_pref_relations_ibfk_1`
  FOREIGN KEY (`area_id`) REFERENCES `myproject`.`areas` (`id`))
  ON UPDATE CASCADE ON DELETE CASCADE ; 

Или, если мы знаем, что в таблице, которую мы усекаем, нет строк внешнего ключа, ссылающихся на строки, может быть возможно отключить проверку внешнего ключа для сеанса, выполнитеTRUNCATE, а затем снова включите внешние ключи.

 SET foreign_key_checks = 0 ;
 TRUNCATE TABLE my_referenced_table; 
 SET foreign_key_checks = 1 ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...