每次测试开始时截断数据库的最佳解决方案是什么?我有带外键的 InnoDB 引擎,yii 不能截断表。
问问题
3787 次
4 回答
5
只是为Yii2添加一个参考 (因为没有容易找到的例子):
$this->db->createCommand()->checkIntegrity(false)->execute();
$this->truncateTable('table_name');
$this->db->createCommand()->checkIntegrity(true)->execute();
于 2015-01-12T17:51:55.727 回答
5
如果您扩展CDbTestCase
并使用内置public $fixtures
属性来指定您的夹具文件,它将自动处理。
但是,如果您构建了自己的夹具生成系统,或者想要截断表格,则可以使用以下内容。
$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();
这也将暂时禁用外键检查。
于 2013-09-30T16:36:10.893 回答
0
Yii 可以截断:
Yii::app()->db->createCommand('TRUNCATE tbl_name')->execute();
于 2013-09-30T11:34:06.367 回答
0
如果您在 Yii 中使用 Fixture 支持进行测试,它将自动为您处理...
于 2013-09-30T13:24:52.790 回答