2013-09-30 41 views

回答

0

的Yii可以截断:

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

Manualy,Yii中可以全自动做到这一点,但如果某些表有外键它不是截断。 – Actimele

+0

所以你需要先解决外键问题! – tinybyte

0

如果您在使用的Yii为你的测试夹具支持它会处理为你自动...

+0

不自动。 – Actimele

3

如果您在public $fixtures财产延长CDbTestCase并使用内置指定你的夹具文件,它会自动处理这个。但是,如果您构建了自己的夹具生成系统,或者想要截断表格,则可以使用以下内容。

$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

只需添加一个参考的Yii2(因为不存在容易找到例子):

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