@JohnP的做法没有考虑到在database.php文件中配置的数据表前缀。以下是一种稍微更加健壮的方法。
每个模型所附属的DboSource对象已经有一个fullTableName()方法,它恰好可以满足我们的需求。
首先,如果不存在,请创建Model/AppModel.php
文件,并将以下方法添加到其中:
public function fullTableName($quote = true, $schema = true) {
$datasource = $this->GetDataSource();
return $datasource->fullTableName($this, $quote, $schema);
}
通过这个方法,你可以获取Cake应用程序中任何模型的完整表名,包括前缀:
$this->Model->fullTableName();
但我们可以做得更好。接下来,在AppModel中添加以下方法:
public function truncate() {
$fullName = $this->fullTableName();
$q = 'TRUNCATE TABLE %s';
return $this->query(sprintf($q, $fullName));
}
现在你可以轻松地截断应用程序中的任何模型,像这样:
$this->Model->truncate();
。如果您需要调整SQL查询以匹配不同的数据源,可以在应用程序的中心位置进行操作。如果某些模型使用不同的数据源和不同的语法,则还可以轻松地覆盖
truncate()
方法。请注意,操作要小心!
$this->Model->query('TRUNCATE TABLE table_name');
- Aditya P Bhatt