Yii测试。截断外键

时间:2013-09-30 10:43:55

标签: php unit-testing yii phpunit

每个测试开始时截断数据库的最佳解决方案是什么?我有InnoDB引擎和foreigh键,yii不能截断表。

4 个答案:

答案 0 :(得分:4)

如果您扩展CDbTestCase并使用内置的public $fixtures属性来指定fixture文件,它将自动处理此问题。

但是,如果您构建了自己的灯具生成系统,或者想要截断表格,则可以使用以下内容。

$this->getFixtureManager()->checkIntegrity(false);
$this->getFixtureManager()->truncateTable('table_name');
$this->getFixtureManager()->checkIntegrity(false);

这再次假设您对单元测试文件进行了扩展CDbTestCase。如果不是,那么您可以直接删除完整性检查,如下所示:

Yii::app()->db->createCommand('set foreign_key_checks=0')->execute();
//do whatever, including truncating
Yii::app()->db->createCommand('set foreign_key_checks=1')->execute();

这也会暂时禁用外键检查。

答案 1 :(得分:2)

只是为 Yii2 添加引用(因为没有易于查找的示例):

$this->db->createCommand()->checkIntegrity(false)->execute();
$this->truncateTable('table_name');
$this->db->createCommand()->checkIntegrity(true)->execute();

答案 2 :(得分:0)

Yii可截断:

Yii::app()->db->createCommand('TRUNCATE tbl_name')->execute();

答案 3 :(得分:0)

如果您在Yii中使用Fixture支持进行测试,它将自动为您处理...