CDbSchema
| Пакет | system.db.schema |
|---|---|
| Наследование | абстрактный класс CDbSchema » CComponent |
| Подклассы | CCubridSchema, CMssqlSchema, CMysqlSchema, COciSchema, CPgsqlSchema, CSqliteSchema |
| С момента | 1.0 |
| Исходный код | framework/db/schema/CDbSchema.php |
Общедоступные свойства
| Свойство | Тип | Описание | Определено |
|---|---|---|---|
| columnTypes | массив | абстрактные типы столбцов, сопоставленные с физическими типами столбцов. | CDbSchema |
| commandBuilder | CDbCommandBuilder | генератор SQL-команд для этого соединения. | CDbSchema |
| dbConnection | CDbConnection | соединение с базой данных. | CDbSchema |
| tableNames | массив | Возвращает все имена таблиц в базе данных. | CDbSchema |
| tables | массив | Возвращает метаданные для всех таблиц в базе данных. | CDbSchema |
Публичные методы
| Метод | Описание | Определено в |
|---|---|---|
| __call() | Вызывает именованный метод, который не является методом класса. | CComponent |
| __construct() | Конструктор. | CDbSchema |
| __get() | Возвращает значение свойства, список обработчиков событий или поведение на основе его имени. | CComponent |
| __isset() | Проверяет, является ли значение свойства null. | CComponent |
| __set() | Устанавливает значение свойства компонента. | CComponent |
| __unset() | Устанавливает свойство компонента в null. | CComponent |
| addColumn() | Создаёт SQL-запрос для добавления нового столбца БД. | CDbSchema |
| addForeignKey() | Создаёт SQL-запрос для добавления ограничения внешнего ключа к существующей таблице. | CDbSchema |
| addPrimaryKey() | Создаёт SQL-запрос для добавления ограничения первичного ключа к существующей таблице. | CDbSchema |
| alterColumn() | Создаёт SQL-запрос для изменения определения столбца. | CDbSchema |
| asa() | Возвращает объект поведения с заданным именем. | CComponent |
| attachBehavior() | Прикрепляет поведение к этому компоненту. | CComponent |
| attachBehaviors() | Прикрепляет список поведений к компоненту. | CComponent |
| attachEventHandler() | Прикрепляет обработчик событий к событию. | CComponent |
| canGetProperty() | Определяет, можно ли прочитать свойство. | CComponent |
| canSetProperty() | Определяет, можно ли установить свойство. | CComponent |
| checkIntegrity() | Включает или выключает проверку целостности. | CDbSchema |
| compareTableNames() | Сравнивает два имени таблиц. | CDbSchema |
| createIndex() | Создаёт SQL-запрос для создания нового индекса. | CDbSchema |
| createTable() | Создаёт SQL-запрос для создания новой таблицы БД. | CDbSchema |
| detachBehavior() | Открепляет поведение от компонента. | CComponent |
| detachBehaviors() | Открепляет все поведения от компонента. | CComponent |
| detachEventHandler() | Открепляет существующий обработчик событий. | CComponent |
| disableBehavior() | Отключает прикреплённое поведение. | CComponent |
| disableBehaviors() | Отключает все прикреплённые поведения этого компонента. | CComponent |
| dropColumn() | Создаёт SQL-запрос для удаления столбца БД. | CDbSchema |
| dropForeignKey() | Создаёт SQL-запрос для удаления ограничения внешнего ключа. | CDbSchema |
| dropIndex() | Создаёт SQL-запрос для удаления индекса. | CDbSchema |
| dropPrimaryKey() | Создаёт SQL-запрос для удаления ограничения первичного ключа существующей таблицы. | CDbSchema |
| dropTable() | Создаёт SQL-запрос для удаления таблицы БД. | CDbSchema |
| enableBehavior() | Включает прикреплённое поведение. | CComponent |
| enableBehaviors() | Включает все прикреплённые поведения этого компонента. | CComponent |
| evaluateExpression() | Вычисляет PHP-выражение или обратный вызов в контексте этого компонента. | CComponent |
| getColumnType() | Преобразует абстрактный тип столбца в физический тип столбца. | CDbSchema |
| getCommandBuilder() | Возвращает билдер SQL-команд для этого соединения. | CDbSchema |
| getDbConnection() | Возвращает соединение с базой данных. Соединение активно. | CDbSchema |
| getEventHandlers() | Возвращает список прикреплённых обработчиков событий для события. | CComponent |
| getTable() | Получает метаданные для указанной таблицы. | CDbSchema |
| getTableNames() | Возвращает все имена таблиц в базе данных. | CDbSchema |
| getTables() | Возвращает метаданные для всех таблиц в базе данных. | CDbSchema |
| hasEvent() | Определяет, определено ли событие. | CComponent |
| hasEventHandler() | Проверяет, есть ли прикреплённые обработчики для заданного события. | CComponent |
| hasProperty() | Определяет, определено ли свойство. | CComponent |
| quoteColumnName() | Заменяет имя столбца кавычками для использования в запросе. | CDbSchema |
| quoteSimpleColumnName() | Заменяет простое имя столбца кавычками для использования в запросе. | CDbSchema |
| quoteSimpleTableName() | Заменяет простое имя таблицы кавычками для использования в запросе. | CDbSchema |
| quoteTableName() | Заменяет имя таблицы кавычками для использования в запросе. | CDbSchema |
| raiseEvent() | Вызывает событие. | CComponent |
| refresh() | Обновляет схему. | CDbSchema |
| renameColumn() | Создаёт SQL-запрос для переименования столбца. | CDbSchema |
| renameTable() | Создаёт SQL-запрос для переименования таблицы БД. | CDbSchema |
| resetSequence() | Сбрасывает значение последовательности первичного ключа таблицы. | CDbSchema |
| truncateTable() | Создаёт SQL-запрос для усечения таблицы БД. | CDbSchema |
Защищённые методы
| Метод | Описание | Определено в |
|---|---|---|
| createCommandBuilder() | Создаёт билдер команд для базы данных. | CDbSchema |
| findTableNames() | Возвращает все имена таблиц в базе данных. | CDbSchema |
| loadTable() | Загружает метаданные для указанной таблицы. | CDbSchema |
Подробности свойств
columnTypes свойство (доступно с версии 1.1.6)
public array $columnTypes;
абстрактные типы столбцов, сопоставленные с физическими типами столбцов.
commandBuilder свойство только для чтения
public CDbCommandBuilder getCommandBuilder()
SQL-билдер команд для этого соединения.
dbConnection свойство только для чтения
public CDbConnection getDbConnection()
соединение с базой данных. Соединение активно.
свойство tableNames только для чтения
public array getTableNames(string $schema='')
Возвращает все имена таблиц в базе данных.
свойство tables только для чтения
public array getTables(string $schema='')
Возвращает метаданные для всех таблиц в базе данных.
Подробное описание методов
__construct() метод
public void __construct(CDbConnection $conn) | ||
| $conn | CDbConnection | соединение с базой данных. |
public function __construct($conn)
{
$this->_connection=$conn;
foreach($conn->schemaCachingExclude as $name)
$this->_cacheExclude[$name]=true;
}
Конструктор.
addColumn() метод (доступен начиная с версии v1.1.6)
public string addColumn(string $table, string $column, string $type) | ||
| $table | string | таблица, к которой будет добавлена новая колонка. Имя таблицы будет должным образом обрамлено кавычками методом. |
| $column | string | имя новой колонки. Имя будет должным образом обрамлено кавычками методом. |
| $type | string | тип колонки. Метод getColumnType будет вызван для преобразования абстрактного типа колонки (если таковой имеется) в физический. Всё, что не распознаётся как абстрактный тип, будет сохранено в сгенерированном SQL. Например, 'string' преобразуется в 'varchar(255)', а 'string not null' станет 'varchar(255) not null'. |
| {return} | string | SQL-запрос для добавления новой колонки. |
public function addColumn($table,$column,$type)
{
return 'ALTER TABLE ' . $this->quoteTableName($table)
. ' ADD ' . $this->quoteColumnName($column) . ' '
. $this->getColumnType($type);
}
Строит SQL-запрос для добавления новой колонки в базу данных.
addForeignKey() метод (доступен начиная с версии v1.1.6)
public string addForeignKey(string $name, string $table, string|array $columns, string $refTable, string|array $refColumns, string $delete=NULL, string $update=NULL) | ||
| $name | string | имя внешнего ключа. |
| $table | string | таблица, к которой будет добавлен внешний ключ. |
| $columns | string|array | имя колонки, к которой будет добавлен ограничение. Если есть несколько колонок, разделяйте их запятыми или передайте как массив имён колонок. |
| $refTable | string | таблица, к которой ссылается внешний ключ. |
| $refColumns | string|array | имя колонки, к которой ссылается внешний ключ. Если есть несколько колонок, разделяйте их запятыми или передайте как массив имён колонок. |
| $delete | string | опция ON DELETE. Большинство СУБД поддерживают эти опции: RESTRICT, CASCADE, NO ACTION, SET DEFAULT, SET NULL |
| $update | string | опция ON UPDATE. Большинство СУБД поддерживают эти опции: RESTRICT, CASCADE, NO ACTION, SET DEFAULT, SET NULL |
| {return} | string | SQL-запрос для добавления ограничения внешнего ключа к существующей таблице. |
public function addForeignKey($name,$table,$columns,$refTable,$refColumns,$delete=null,$update=null)
{
if(is_string($columns))
$columns=preg_split('/\s*,\s*/',$columns,-1,PREG_SPLIT_NO_EMPTY);
foreach($columns as $i=>$col)
$columns[$i]=$this->quoteColumnName($col);
if(is_string($refColumns))
$refColumns=preg_split('/\s*,\s*/',$refColumns,-1,PREG_SPLIT_NO_EMPTY);
foreach($refColumns as $i=>$col)
$refColumns[$i]=$this->quoteColumnName($col);
$sql='ALTER TABLE '.$this->quoteTableName($table)
.' ADD CONSTRAINT '.$this->quoteColumnName($name)
.' FOREIGN KEY ('.implode(', ',$columns).')'
.' REFERENCES '.$this->quoteTableName($refTable)
.' ('.implode(', ',$refColumns).')';
if($delete!==null)
$sql.=' ON DELETE '.$delete;
if($update!==null)
$sql.=' ON UPDATE '.$update;
return $sql;
}
Строит SQL-запрос для добавления ограничения внешнего ключа к существующей таблице. Метод должным образом обрамляет кавычками имена таблиц и колонок.
addPrimaryKey() метод (доступен начиная с версии v1.1.13)
public string addPrimaryKey(string $name, string $table, string|array $columns) | ||
| $name | string | имя ограничения первичного ключа. |
| $table | string | таблица, к которой будет добавлено ограничение первичного ключа. |
| $columns | string|array | строка, разделенная запятыми, или массив колонок, из которых будет состоять первичный ключ. Массивы доступны с версии 1.1.14. |
| {return} | string | SQL-запрос для добавления ограничения первичного ключа к существующей таблице. |
public function addPrimaryKey($name,$table,$columns)
{
if(is_string($columns))
$columns=preg_split('/\s*,\s*/',$columns,-1,PREG_SPLIT_NO_EMPTY);
foreach($columns as $i=>$col)
$columns[$i]=$this->quoteColumnName($col);
return 'ALTER TABLE ' . $this->quoteTableName($table) . ' ADD CONSTRAINT '
. $this->quoteColumnName($name) . ' PRIMARY KEY ('
. implode(', ',$columns). ' )';
}
Строит SQL-запрос для добавления ограничения первичного ключа к существующей таблице.
alterColumn() метод (доступен начиная с версии v1.1.6)
public string alterColumn(string $table, string $column, string $type) | ||
| $table | string | таблица, колонка которой будет изменена. Имя таблицы будет должным образом обрамлено кавычками методом. |
| $column | string | имя колонки, которая будет изменена. Имя будет должным образом обрамлено кавычками методом. |
| $type | string | новый тип колонки. Метод getColumnType будет вызван для преобразования абстрактного типа колонки (если таковой имеется) в физический. Всё, что не распознаётся как абстрактный тип, будет сохранено в сгенерированном SQL. Например, 'string' преобразуется в 'varchar(255)', а 'string not null' станет 'varchar(255) not null'. |
| {return} | string | SQL-запрос для изменения определения колонки. |
public function alterColumn($table,$column,$type)
{
return 'ALTER TABLE ' . $this->quoteTableName($table) . ' CHANGE '
. $this->quoteColumnName($column) . ' '
. $this->quoteColumnName($column) . ' '
. $this->getColumnType($type);
}
Строит SQL-запрос для изменения определения колонки.
checkIntegrity() метод (доступен начиная с версии v1.1)
public void checkIntegrity(boolean $check=true, string $schema='') | ||
| $check | boolean | включить или выключить проверку целостности. |
| $schema | string | схема таблиц. По умолчанию пустая строка, что означает текущую или по умолчанию схему. |
public function checkIntegrity($check=true,$schema='')
{
}
Включает или выключает проверку целостности.
compareTableNames() метод
public boolean compareTableNames(string $name1, string $name2) | ||
| $name1 | string | имя таблицы 1 |
| $name2 | string | имя таблицы 2 |
| {return} | boolean | ссылки на две таблицы относятся к одной и той же таблице. |
public function compareTableNames($name1,$name2)
{
$name1=str_replace(array('"','`',"'"),'',$name1);
$name2=str_replace(array('"','`',"'"),'',$name2);
if(($pos=strrpos($name1,'.'))!==false)
$name1=substr($name1,$pos+1);
if(($pos=strrpos($name2,'.'))!==false)
$name2=substr($name2,$pos+1);
if($this->_connection->tablePrefix!==null)
{
if(strpos($name1,'{')!==false)
$name1=$this->_connection->tablePrefix.str_replace(array('{','}'),'',$name1);
if(strpos($name2,'{')!==false)
$name2=$this->_connection->tablePrefix.str_replace(array('{','}'),'',$name2);
}
return $name1===$name2;
}
Сравнивает два имени таблиц. Имена таблиц могут быть обрамлены или не обрамлены кавычками. Этот метод учтёт оба случая.
createCommandBuilder() метод
protected CDbCommandBuilder createCommandBuilder() | ||
| {return} | CDbCommandBuilder | экземпляр билдера команд |
protected function createCommandBuilder()
{
return new CDbCommandBuilder($this);
}
Создаёт билдер команд для базы данных. Этот метод может быть переопределён дочерними классами для создания билдера команд, специфичного для СУБД.
createIndex() метод (доступен начиная с версии v1.1.6)
public string createIndex(string $name, string $table, string|array $columns, boolean $unique=false) | ||
| $name | string | имя индекса. Имя будет должным образом обрамлено кавычками методом. |
| $table | string | таблица, для которой будет создан новый индекс. Имя таблицы будет должным образом обрамлено кавычками методом. |
| $columns | string|array | колонка(и), которые должны быть включены в индекс. Если колонок несколько, их необходимо разделить запятыми или передать в виде массива имён колонок. Каждое имя колонки будет должным образом обрамлено кавычками методом, если в имени не встречаются скобки. |
| $unique | boolean | указывает, нужно ли добавить ограничение UNIQUE к созданному индексу. |
| {return} | string | SQL-запрос для создания нового индекса. |
public function createIndex($name,$table,$columns,$unique=false)
{
$cols=array();
if(is_string($columns))
$columns=preg_split('/\s*,\s*/',$columns,-1,PREG_SPLIT_NO_EMPTY);
foreach($columns as $col)
{
if(strpos($col,'(')!==false)
$cols[]=$col;
else
$cols[]=$this->quoteColumnName($col);
}
return ($unique ? 'CREATE UNIQUE INDEX ' : 'CREATE INDEX ')
. $this->quoteTableName($name).' ON '
. $this->quoteTableName($table).' ('.implode(', ',$cols).')';
}
Создаёт SQL-запрос для создания нового индекса.
createTable() метод (доступен начиная с v1.1.6)
public string createTable(string $table, array $columns, string $options=NULL) | ||
| $table | string | имя таблицы, которая должна быть создана. Имя будет должным образом обрамлено кавычками методом. |
| $columns | array | колонки (имя=>определение) в новой таблице. |
| $options | string | дополнительный фрагмент SQL, который будет добавлен к сгенерированному SQL-запросу. |
| {return} | string | SQL-запрос для создания новой таблицы БД. |
public function createTable($table,$columns,$options=null)
{
$cols=array();
foreach($columns as $name=>$type)
{
if(is_string($name))
$cols[]="\t".$this->quoteColumnName($name).' '.$this->getColumnType($type);
else
$cols[]="\t".$type;
}
$sql="CREATE TABLE ".$this->quoteTableName($table)." (\n".implode(",\n",$cols)."\n)";
return $options===null ? $sql : $sql.' '.$options;
}
Создаёт SQL-запрос для создания новой таблицы БД.
Колонки новой таблицы должны быть указаны в виде пар имя-определение (например, 'имя'=>'строка'), где имя представляет имя колонки, которое будет должным образом обрамлено кавычками методом, а определение — тип колонки, который может содержать абстрактный тип БД. Метод getColumnType будет вызван для преобразования любого абстрактного типа в физический.
Если колонка указана только с определением (например, 'PRIMARY KEY (имя, тип)'), она будет непосредственно вставлена в сгенерированный SQL.
dropColumn() метод (доступен начиная с v1.1.6)
public string dropColumn(string $table, string $column) | ||
| $table | string | таблица, из которой нужно удалить колонку. Имя будет должным образом обрамлено кавычками методом. |
| $column | string | имя колонки, которую нужно удалить. Имя будет должным образом обрамлено кавычками методом. |
| {return} | string | SQL-запрос для удаления колонки БД. |
public function dropColumn($table,$column)
{
return "ALTER TABLE ".$this->quoteTableName($table)
." DROP COLUMN ".$this->quoteColumnName($column);
}
Создаёт SQL-запрос для удаления колонки БД.
dropForeignKey() метод (доступен начиная с v1.1.6)
public string dropForeignKey(string $name, string $table) | ||
| $name | string | имя ограничения внешнего ключа, которое нужно удалить. Имя будет должным образом обрамлено кавычками методом. |
| $table | string | таблица, из которой нужно удалить ограничение внешнего ключа. Имя будет должным образом обрамлено кавычками методом. |
| {return} | string | SQL-запрос для удаления ограничения внешнего ключа. |
public function dropForeignKey($name,$table)
{
return 'ALTER TABLE '.$this->quoteTableName($table)
.' DROP CONSTRAINT '.$this->quoteColumnName($name);
}
Создаёт SQL-запрос для удаления ограничения внешнего ключа.
dropIndex() метод (доступен начиная с v1.1.6)
public string dropIndex(string $name, string $table) | ||
| $name | string | имя индекса, который нужно удалить. Имя будет должным образом обрамлено кавычками методом. |
| $table | string | таблица, из которой нужно удалить индекс. Имя будет должным образом обрамлено кавычками методом. |
| {return} | string | SQL-запрос для удаления индекса. |
public function dropIndex($name,$table)
{
return 'DROP INDEX '.$this->quoteTableName($name).' ON '.$this->quoteTableName($table);
}
Создаёт SQL-запрос для удаления индекса.
dropPrimaryKey() метод (доступен начиная с v1.1.13)
public string dropPrimaryKey(string $name, string $table) | ||
| $name | string | имя ограничения первичного ключа, которое нужно удалить. |
| $table | string | таблица, из которой нужно удалить ограничение первичного ключа. |
| {return} | string | SQL-запрос для удаления ограничения первичного ключа из существующей таблицы. |
public function dropPrimaryKey($name,$table)
{
return 'ALTER TABLE ' . $this->quoteTableName($table) . ' DROP CONSTRAINT '
. $this->quoteColumnName($name);
}
Создаёт SQL-запрос для удаления ограничения первичного ключа из существующей таблицы.
dropTable() метод (доступен начиная с v1.1.6)
public string dropTable(string $table) | ||
| $table | string | таблица, которую нужно удалить. Имя будет должным образом обрамлено кавычками методом. |
| {return} | string | SQL-запрос для удаления таблицы БД. |
public function dropTable($table)
{
return "DROP TABLE ".$this->quoteTableName($table);
}
Создаёт SQL-запрос для удаления таблицы БД.
findTableNames() метод
protected array findTableNames(string $schema='') | ||
| $schema | string | схема таблиц. По умолчанию пустая строка, означающая текущую или по умолчанию схему. Если не пустая, возвращаемые имена таблиц будут иметь префикс с именем схемы. |
| {return} | array | все имена таблиц в базе данных. |
protected function findTableNames($schema='')
{
throw new CDbException(Yii::t('yii','{class} does not support fetching all table names.',
array('{class}'=>get_class($this))));
}
Возвращает все имена таблиц в базе данных. Этот метод должен быть переопределён дочерними классами для поддержки этой функции, так как по умолчанию он просто выбрасывает исключение.
getColumnType() метод (доступен начиная с v1.1.6)
public string getColumnType(string $type) | ||
| $type | string | абстрактный тип колонки |
| {return} | string | физический тип колонки. |
public function getColumnType($type)
{
if(isset($this->columnTypes[$type]))
return $this->columnTypes[$type];
elseif(($pos=strpos($type,' '))!==false)
{
$t=substr($type,0,$pos);
return (isset($this->columnTypes[$t]) ? $this->columnTypes[$t] : $t).substr($type,$pos);
}
else
return $type;
}
Преобразует абстрактный тип колонки в физический тип колонки. Преобразование выполняется с использованием карты типов, указанной в columnTypes. Эти абстрактные типы колонок поддерживаются (используя MySQL в качестве примера для объяснения соответствующих физических типов):
- pk и bigpk: тип автоинкрементного первичного ключа, будет преобразован в «int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY» или «bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY»
- string: строковый тип, будет преобразован в «varchar(255)»
- text: тип длинной строки, будет преобразован в «text»
- integer: целочисленный тип, будет преобразован в «int(11)»
- bigint: целочисленный тип, будет преобразован в «bigint(20)»
- boolean: булевый тип, будет преобразован в «tinyint(1)»
- float: тип числа с плавающей запятой, будет преобразован в «float»
- decimal: тип десятичного числа, будет преобразован в «decimal»
- datetime: тип даты и времени, будет преобразован в «datetime»
- timestamp: тип метки времени, будет преобразован в «timestamp»
- time: тип времени, будет преобразован в «time»
- date: тип даты, будет преобразован в «date»
- binary: тип двоичных данных, будет преобразован в «blob»
Если абстрактный тип содержит две или более части, разделенные пробелами (например, «string NOT NULL»), то будет преобразована только первая часть, а остальные части будут добавлены к результату преобразования. Например, 'string NOT NULL' преобразуется в 'varchar(255) NOT NULL'.
getCommandBuilder() метод
public CDbCommandBuilder getCommandBuilder() | ||
| {return} | CDbCommandBuilder | построитель SQL-команд для этого подключения. |
public function getCommandBuilder()
{
if($this->_builder!==null)
return $this->_builder;
else
return $this->_builder=$this->createCommandBuilder();
}
getDbConnection() метод
public CDbConnection getDbConnection() | ||
| {return} | CDbConnection | подключение к базе данных. Подключение активно. |
public function getDbConnection()
{
return $this->_connection;
}
getTable() метод
public CDbTableSchema getTable(string $name, boolean $refresh=false) | ||
| $name | string | имя таблицы |
| $refresh | boolean | необходимо ли обновить кэш схемы таблицы. Параметр доступен начиная с версии 1.1.9 |
| {return} | CDbTableSchema | метаданные таблицы. Значение Null, если таблица с указанным именем не существует. |
public function getTable($name,$refresh=false)
{
if($refresh===false && isset($this->_tables[$name]))
return $this->_tables[$name];
else
{
if($this->_connection->tablePrefix!==null && strpos($name,'{{')!==false)
$realName=preg_replace('/\{\{(.*?)\}\}/',$this->_connection->tablePrefix.'$1',$name);
else
$realName=$name;
// temporarily disable query caching
if($this->_connection->queryCachingDuration>0)
{
$qcDuration=$this->_connection->queryCachingDuration;
$this->_connection->queryCachingDuration=0;
}
if(!isset($this->_cacheExclude[$name]) && ($duration=$this->_connection->schemaCachingDuration)>0 && $this->_connection->schemaCacheID!==false && ($cache=Yii::app()->getComponent($this->_connection->schemaCacheID))!==null)
{
$key='yii:dbschema'.$this->_connection->connectionString.':'.$this->_connection->username.':'.$name;
$table=$cache->get($key);
if($refresh===true || $table===false)
{
$table=$this->loadTable($realName);
if($table!==null)
$cache->set($key,$table,$duration);
}
$this->_tables[$name]=$table;
}
else
$this->_tables[$name]=$table=$this->loadTable($realName);
if(isset($qcDuration)) // re-enable query caching
$this->_connection->queryCachingDuration=$qcDuration;
return $table;
}
}
Получает метаданные для указанной таблицы.
getTableNames() метод
public array getTableNames(string $schema='') | ||
| $schema | string | схема таблиц. По умолчанию пустая строка, что означает текущую или по умолчанию схему. Если не пустая, возвращаемые имена таблиц будут префиксрованы именем схемы. |
| {return} | array | все имена таблиц в базе данных. |
public function getTableNames($schema='')
{
if(!isset($this->_tableNames[$schema]))
$this->_tableNames[$schema]=$this->findTableNames($schema);
return $this->_tableNames[$schema];
}
Возвращает все имена таблиц в базе данных.
getTables() метод
public array getTables(string $schema='') | ||
| $schema | string | схема таблиц. По умолчанию пустая строка, что означает текущую или по умолчанию схему. |
| {return} | array | метаданные для всех таблиц в базе данных. Каждый элемент массива является экземпляром CDbTableSchema (или его дочернего класса). Ключами массива являются имена таблиц. |
public function getTables($schema='')
{
$tables=array();
foreach($this->getTableNames($schema) as $name)
{
if(($table=$this->getTable($name))!==null)
$tables[$name]=$table;
}
return $tables;
}
Возвращает метаданные для всех таблиц в базе данных.
loadTable() метод
abstract protected CDbTableSchema loadTable(string $name) | ||
| $name | string | имя таблицы |
| {return} | CDbTableSchema | зависимые от драйвера метаданные таблицы, null, если таблица не существует. |
abstract protected function loadTable($name);
Загружает метаданные для указанной таблицы.
quoteColumnName() метод
public string quoteColumnName(string $name) | ||
| $name | string | имя столбца |
| {return} | string | правильно обрамлённое имя столбца |
public function quoteColumnName($name)
{
if(($pos=strrpos($name,'.'))!==false)
{
$prefix=$this->quoteTableName(substr($name,0,$pos)).'.';
$name=substr($name,$pos+1);
}
else
$prefix='';
return $prefix . ($name==='*' ? $name : $this->quoteSimpleColumnName($name));
}
Обрамляет имя столбца для использования в запросе. Если имя столбца содержит префикс, префикс также будет правильно обрамлён.
См. также
quoteSimpleColumnName() метод (доступен начиная с версии 1.1.6)
public string quoteSimpleColumnName(string $name) | ||
| $name | string | имя столбца |
| {return} | string | правильно обрамлённое имя столбца |
public function quoteSimpleColumnName($name)
{
return '"'.$name.'"';
}
Обрамляет простое имя столбца для использования в запросе. Простое имя столбца не содержит префикса.
quoteSimpleTableName() метод (доступен начиная с версии 1.1.6)
public string quoteSimpleTableName(string $name) | ||
| $name | string | имя таблицы |
| {return} | string | правильно обрамлённое имя таблицы |
public function quoteSimpleTableName($name)
{
return "'".$name."'";
}
Обрамляет простое имя таблицы для использования в запросе. Простое имя таблицы не содержит префикса схемы.
quoteTableName() метод
public string quoteTableName(string $name) | ||
| $name | string | имя таблицы |
| {return} | string | правильно обрамлённое имя таблицы |
public function quoteTableName($name)
{
if(strpos($name,'.')===false)
return $this->quoteSimpleTableName($name);
$parts=explode('.',$name);
foreach($parts as $i=>$part)
$parts[$i]=$this->quoteSimpleTableName($part);
return implode('.',$parts);
}
Обрамляет имя таблицы для использования в запросе. Если имя таблицы содержит префикс схемы, префикс также будет правильно обрамлён.
См. также
refresh() метод
public void refresh() |
public function refresh()
{
if(($duration=$this->_connection->schemaCachingDuration)>0 && $this->_connection->schemaCacheID!==false && ($cache=Yii::app()->getComponent($this->_connection->schemaCacheID))!==null)
{
foreach(array_keys($this->_tables) as $name)
{
if(!isset($this->_cacheExclude[$name]))
{
$key='yii:dbschema'.$this->_connection->connectionString.':'.$this->_connection->username.':'.$name;
$cache->delete($key);
}
}
}
$this->_tables=array();
$this->_tableNames=array();
$this->_builder=null;
}
Обновляет схему. Этот метод сбрасывает загруженные метаданные таблицы и построитель команд, чтобы они могли быть повторно созданы для отражения изменения схемы.
renameColumn() метод (доступен начиная с версии 1.1.6)
public string renameColumn(string $table, string $name, string $newName) | ||
| $table | string | таблица, столбец которой требуется переименовать. Имя будет корректно обрамлено кавычками методом. |
| $name | string | старое имя столбца. Имя будет корректно обрамлено кавычками методом. |
| $newName | string | новое имя столбца. Имя будет корректно обрамлено кавычками методом. |
| {return} | string | SQL-запрос для переименования столбца БД. |
public function renameColumn($table,$name,$newName)
{
return "ALTER TABLE ".$this->quoteTableName($table)
. " RENAME COLUMN ".$this->quoteColumnName($name)
. " TO ".$this->quoteColumnName($newName);
}
Создаёт SQL-запрос для переименования столбца.
renameTable() метод (доступен начиная с версии v1.1.6)
public string renameTable(string $table, string $newName) | ||
| $table | string | таблица, которую требуется переименовать. Имя будет корректно обрамлено кавычками методом. |
| $newName | string | новое имя таблицы. Имя будет корректно обрамлено кавычками методом. |
| {return} | string | SQL-запрос для переименования таблицы БД. |
public function renameTable($table,$newName)
{
return 'RENAME TABLE ' . $this->quoteTableName($table) . ' TO ' . $this->quoteTableName($newName);
}
Создаёт SQL-запрос для переименования таблицы БД.
resetSequence() метод (доступен начиная с версии v1.1)
public void resetSequence(CDbTableSchema $table, integer|null $value=NULL) | ||
| $table | CDbTableSchema | схема таблицы, последовательность первичного ключа которой будет сброшена |
| $value | integer|null | значение для первичного ключа следующей новой строки, вставленной. Если не задано, первичный ключ следующей новой строки будет иметь максимальное значение первичного ключа плюс один (т.е. обрезка последовательности). |
public function resetSequence($table,$value=null)
{
}
Сбрасывает значение последовательности первичного ключа таблицы. Последовательность будет сброшена таким образом, что первичный ключ следующей новой вставленной строки будет иметь заданное значение или максимальное значение первичного ключа плюс один (т.е. обрезка последовательности).
truncateTable() метод (доступен начиная с версии v1.1.6)
public string truncateTable(string $table) | ||
| $table | string | таблица, которая будет усечена. Имя будет корректно обрамлено кавычками методом. |
| {return} | string | SQL-запрос для усечения таблицы БД. |
public function truncateTable($table)
{
return "TRUNCATE TABLE ".$this->quoteTableName($table);
}
Создаёт SQL-запрос для усечения таблицы БД.
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CDbSchema