public function dropForeignKey($name, $table) { return 'ALTER TABLE '.$this->quoteTableName($table) .' DROP FOREIGN KEY '.$this->quoteColumnName($name); }
Строит SQL-запрос для удаления ограничения внешнего ключа.
dropPrimaryKey() метод (доступен с версии v1.1.13)
public string dropPrimaryKey(string $name, string $table)
$name
string
имя ограничения первичного ключа, которое нужно удалить.
$table
string
таблица, из которой нужно удалить ограничение первичного ключа.
{return}
string
SQL-запрос для удаления ограничения первичного ключа из существующей таблицы.
protected function findConstraints($table) { $row=$this->getDbConnection()->createCommand('SHOW CREATE TABLE '.$table->rawName)->queryRow(); $matches=array(); $regexp='/FOREIGN KEY\s+\(([^\)]+)\)\s+REFERENCES\s+([^\(^\s]+)\s*\(([^\)]+)\)/mi'; foreach($row as $sql) { if(preg_match_all($regexp,$sql,$matches,PREG_SET_ORDER)) break; } foreach($matches as $match) { $keys=array_map('trim',explode(',',str_replace(array('`','"'),'',$match[1]))); $fks=array_map('trim',explode(',',str_replace(array('`','"'),'',$match[3]))); foreach($keys as $k=>$name) { $table->foreignKeys[$name]=array(str_replace(array('`','"'),'',$match[2]),$fks[$k]); if(isset($table->columns[$name])) $table->columns[$name]->isForeignKey=true; } } }
Собрать данные о внешних ключах для заданной таблицы.
findTableNames() метод
protected array findTableNames(string $schema='')
$schema
string
схема таблиц. По умолчанию пустая строка, что означает текущую или стандартную схему. Если не пустая, имена возвращаемых таблиц будут иметь префикс с именем схемы.
схема таблицы, последовательность первичного ключа которой будет сброшена
$value
integer|null
значение для первичного ключа следующей новой вставленной строки. Если не задано, следующий первичный ключ новой строки будет иметь максимальное значение первичного ключа плюс один (т.е. обрезка последовательности).
public function resetSequence($table,$value=null) { if($table->sequenceName===null) return; if($value!==null) $value=(int)$value; else { $value=(int)$this->getDbConnection() ->createCommand("SELECT MAX(`{$table->primaryKey}`) FROM {$table->rawName}") ->queryScalar(); $value++; } $this->getDbConnection() ->createCommand("ALTER TABLE {$table->rawName} AUTO_INCREMENT=$value") ->execute(); }
Сбрасывает значение последовательности первичного ключа таблицы. Последовательность будет сброшена таким образом, что первичный ключ следующей новой вставленной строки будет иметь указанное значение или максимальное значение первичного ключа плюс один (т.е. обрезка последовательности).