@ JohnP не учитывает префикс таблицы, настроенный в database.php . Вот немного более надежный подход.
Объект DboSource , прикрепленный к каждой модели, уже имеет метод fullTableName () , который делает именно то, что нам нужно.
Сначала создайте Model/AppModel.php
, если он еще не существует, и добавьте в него этот метод:
/**
* fullTableName
*
* Provides access to the Model's DataSource's ::fullTableName() method.
* Returns the fully quoted and prefixed table name for the current Model.
*
* @access public
* @param boolean $quote Whether you want the table name quoted.
* @param boolean $schema Whether you want the schema name included.
* @return string Full quoted table name.
*/
public function fullTableName($quote = true, $schema = true) {
$datasource = $this->GetDataSource();
return $datasource->fullTableName($this, $quote, $schema);
}
При этом вы можете получить полное имя таблицы, включая префикс, для любой модели в вашем приложении Cake:
$this->Model->fullTableName();
Хотя мы можем добиться большего. Затем добавьте этот метод в AppModel:
/**
* truncate
*
* Truncates ALL RECORDS from the Model it is called from! VERY DANGEROUS!
* Depends on the ::fullTableName() method to concatenate the configured
* table prefix and table name together and quote the whole bit properly.
*
* @access public
* @return mixed
*/
public function truncate() {
$fullName = $this->fullTableName();
$q = 'TRUNCATE TABLE %s';
return $this->query(sprintf($q, $fullName));
}
Теперь вы можете (легко, так что будьте осторожны!) Обрезать любую модель в вашем приложении следующим образом:
$this->Model->truncate();
И если вам когда-либо понадобится настроить запрос SQL для соответствия другому источнику данных, вы можете сделать это в центральном месте вашего приложения. Вы также можете легко переопределить метод truncate()
в определенных моделях, если они используют другой источник данных с другим синтаксисом.