Spec-Zone.ru › Yii 1.1

CMysqlSchema

Пакет system.db.schema.mysql
Наследование class CMysqlSchema » CDbSchema » CComponent
С момента 1.0
Исходный код framework/db/schema/mysql/CMysqlSchema.php
CMysqlSchema — класс для получения метаданных из базы данных MySQL (версии 4.1.x и 5.x).

Публичные свойства

Свойство Тип Описание Определено
columnTypes массив абстрактные типы столбцов, сопоставленные с физическими типами столбцов. CMysqlSchema
commandBuilder CDbCommandBuilder генератор SQL-команд для этого соединения. CDbSchema
dbConnection CDbConnection соединение с базой данных. CDbSchema
tableNames массив Возвращает все имена таблиц в базе данных. CDbSchema
tables массив Возвращает метаданные для всех таблиц в базе данных. CDbSchema

Защищенные свойства

Свойство Тип Описание Определено
serverVersion float версия сервера. CMysqlSchema

Общедоступные методы

Метод Описание Определено в
__call() Вызывает метод с указанным именем, который не является методом класса. CComponent
__construct() Конструктор. CDbSchema
__get() Возвращает значение свойства, список обработчиков событий или поведение по его имени. CComponent
__isset() Проверяет, является ли значение свойства нулевым. CComponent
__set() Устанавливает значение свойства компонента. CComponent
__unset() Устанавливает свойство компонента в значение null. CComponent
addColumn() Создаёт SQL-запрос для добавления нового столбца БД. CDbSchema
addForeignKey() Создаёт SQL-запрос для добавления ограничения внешнего ключа к существующей таблице. CDbSchema
addPrimaryKey() Создаёт SQL-запрос для добавления ограничения первичного ключа к таблице. CMysqlSchema
alterColumn() Создаёт SQL-запрос для изменения определения столбца. CDbSchema
asa() Возвращает объект поведения с указанным именем. CComponent
attachBehavior() Прикрепляет поведение к данному компоненту. CComponent
attachBehaviors() Прикрепляет список поведений к компоненту. CComponent
attachEventHandler() Прикрепляет обработчик события к событию. CComponent
canGetProperty() Определяет, можно ли прочитать свойство. CComponent
canSetProperty() Определяет, можно ли установить свойство. CComponent
checkIntegrity() Включает или выключает проверку целостности. CMysqlSchema
compareTableNames() Сравнивает два имени таблиц. CMysqlSchema
createIndex() Создаёт SQL-запрос для создания нового индекса. CDbSchema
createTable() Создаёт SQL-запрос для создания новой таблицы БД. CDbSchema
detachBehavior() Открепляет поведение от компонента. CComponent
detachBehaviors() Открепляет все поведения от компонента. CComponent
detachEventHandler() Открепляет существующий обработчик события. CComponent
disableBehavior() Отключает прикреплённое поведение. CComponent
disableBehaviors() Отключает все прикреплённые поведения данного компонента. CComponent
dropColumn() Создаёт SQL-запрос для удаления столбца БД. CDbSchema
dropForeignKey() Создаёт SQL-запрос для удаления ограничения внешнего ключа. CMysqlSchema
dropIndex() Создаёт SQL-запрос для удаления индекса. CDbSchema
dropPrimaryKey() Создаёт SQL-запрос для удаления ограничения первичного ключа в существующей таблице. CMysqlSchema
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() Приводит имя столбца к цитируемому виду для использования в запросе. CMysqlSchema
quoteSimpleTableName() Приводит имя таблицы к цитируемому виду для использования в запросе. CMysqlSchema
quoteTableName() Приводит имя таблицы к цитируемому виду для использования в запросе. CDbSchema
raiseEvent() Вызывает событие. CComponent
refresh() Обновляет схему. CDbSchema
renameColumn() Создаёт SQL-запрос для переименования столбца. CMysqlSchema
renameTable() Создаёт SQL-запрос для переименования таблицы БД. CDbSchema
resetSequence() Сбрасывает значение последовательности первичного ключа таблицы. CMysqlSchema
truncateTable() Создаёт SQL-запрос для обнуления таблицы БД. CDbSchema

Защищенные методы

Метод Описание Определено в
createColumn() Создаёт столбец таблицы. CMysqlSchema
createCommandBuilder() Создаёт генератор команд для базы данных. CMysqlSchema
findColumns() Собрать метаданные столбцов таблицы. CMysqlSchema
findConstraints() Собрать данные о внешних ключах для заданной таблицы. CMysqlSchema
findTableNames() Возвращает все имена таблиц в базе данных. CMysqlSchema
getServerVersion() Возвращает версию сервера. CMysqlSchema
loadTable() Загружает метаданные для указанной таблицы. CMysqlSchema
resolveTableNames() Генерирует различные виды имён таблиц. CMysqlSchema

Подробности свойств

columnTypes свойство (доступно с версии v1.1.6)

public array $columnTypes;

абстрактные типы столбцов, сопоставленные с физическими типами столбцов.

serverVersion свойство только для чтения

protected float getServerVersion()

версия сервера.

Подробности методов

addPrimaryKey() метод (доступен с версии v1.1.14)

public string addPrimaryKey(string $name, string $table, string|array $columns)
$name string не используется в синтаксисе MySQL, первичный ключ всегда называется PRIMARY и зарезервирован.
$table string таблица, к которой будет добавленное ограничение первичного ключа.
$columns string|array строка, разделяемая запятыми, или массив столбцов, из которых будет состоять первичный ключ.
{return} string SQL-запрос для добавления ограничения первичного ключа в существующую таблицу.
Исходный код: framework/db/schema/mysql/CMysqlSchema.php#354 (показать)
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 PRIMARY KEY ('
        
. implode(', ', $columns). ' )';
}

Строит SQL-запрос для добавления ограничения первичного ключа в таблицу.

checkIntegrity() метод (доступен с версии v1.1)

public void checkIntegrity(boolean $check=true, string $schema='')
$check boolean включить или выключить проверку целостности.
$schema string схема таблиц. По умолчанию пустая строка, что означает текущую или стандартную схему.
Исходный код: framework/db/schema/mysql/CMysqlSchema.php#113 (показать)
public function checkIntegrity($check=true,$schema='')
{
    
$this->getDbConnection()->createCommand('SET FOREIGN_KEY_CHECKS='.($check?1:0))->execute();
}

Включает или выключает проверку целостности.

compareTableNames() метод

public boolean compareTableNames(string $name1, string $name2)
$name1 string имя таблицы 1
$name2 string имя таблицы 2
{return} boolean являются ли два имени таблиц ссылками на одну и ту же таблицу.
Исходный код: framework/db/schema/mysql/CMysqlSchema.php#74 (показать)
public function compareTableNames($name1,$name2)
{
    return 
parent::compareTableNames(strtolower($name1),strtolower($name2));
}

Сравнивает два имени таблиц. Имена таблиц могут быть в кавычках или без. Этот метод учтёт оба случая.

createColumn() метод

protected CDbColumnSchema createColumn(array $column)
$column array метаданные столбца
{return} CDbColumnSchema нормализованные метаданные столбца
Исходный код: framework/db/schema/mysql/CMysqlSchema.php#198 (показать)
protected function createColumn($column)
{
    
$c=new CMysqlColumnSchema;
    
$c->name=$column['Field'];
    
$c->rawName=$this->quoteColumnName($c->name);
    
$c->allowNull=$column['Null']==='YES';
    
$c->isPrimaryKey=strpos($column['Key'],'PRI')!==false;
    
$c->isForeignKey=false;
    
$c->init($column['Type'],$column['Default']);
    
$c->autoIncrement=strpos(strtolower($column['Extra']),'auto_increment')!==false;
    if(isset(
$column['Comment']))
        
$c->comment=$column['Comment'];

    return 
$c;
}

Создаёт столбец таблицы.

createCommandBuilder() метод (доступен с версии v1.1.13)

protected CDbCommandBuilder createCommandBuilder()
{return} CDbCommandBuilder экземпляр генератора команд
Исходный код: framework/db/schema/mysql/CMysqlSchema.php#274 (показать)
protected function createCommandBuilder()
{
    return new 
CMysqlCommandBuilder($this);
}

Создаёт генератор команд для базы данных. Этот метод переопределяет реализацию родительского класса, чтобы создать генератор команд для MySQL.

dropForeignKey() метод (доступен с версии v1.1.6)

public string dropForeignKey(string $name, string $table)
$name string имя ограничения внешнего ключа, которое нужно удалить. Метод корректно приведёт имя к кавычкам.
$table string таблица, из которой необходимо удалить ограничение внешнего ключа. Метод корректно приведёт имя к кавычкам.
{return} string SQL-запрос для удаления ограничения внешнего ключа.
Исходный код: framework/db/schema/mysql/CMysqlSchema.php#326 (показать)
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-запрос для удаления ограничения первичного ключа из существующей таблицы.
Исходный код: framework/db/schema/mysql/CMysqlSchema.php#340 (показать)
public function dropPrimaryKey($name,$table)
{
    return 
'ALTER TABLE ' . $this->quoteTableName($table) . ' DROP PRIMARY KEY';

}

Строит SQL-запрос для удаления ограничения первичного ключа из существующей таблицы.

findColumns() метод

protected boolean findColumns(CMysqlTableSchema $table)
$table CMysqlTableSchema метаданные таблицы
{return} boolean существует ли таблица в базе данных
Исходный код: framework/db/schema/mysql/CMysqlSchema.php#163 (показать)
protected function findColumns($table)
{
    
$sql='SHOW FULL COLUMNS FROM '.$table->rawName;
    try
    {
        
$columns=$this->getDbConnection()->createCommand($sql)->queryAll();
    }
    catch(
Exception $e)
    {
        return 
false;
    }
    foreach(
$columns as $column)
    {
        
$c=$this->createColumn($column);
        
$table->columns[$c->name]=$c;
        if(
$c->isPrimaryKey)
        {
            if(
$table->primaryKey===null)
                
$table->primaryKey=$c->name;
            elseif(
is_string($table->primaryKey))
                
$table->primaryKey=array($table->primaryKey,$c->name);
            else
                
$table->primaryKey[]=$c->name;
            if(
$c->autoIncrement)
                
$table->sequenceName='';
        }
    }
    return 
true;
}

Собрать метаданные столбцов таблицы.

findConstraints() метод

protected void findConstraints(CMysqlTableSchema $table)
$table CMysqlTableSchema метаданные таблицы
Исходный код: framework/db/schema/mysql/CMysqlSchema.php#229 (показать)
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 схема таблиц. По умолчанию пустая строка, что означает текущую или стандартную схему. Если не пустая, имена возвращаемых таблиц будут иметь префикс с именем схемы.
{return} array все имена таблиц в базе данных.
Исходный код: framework/db/schema/mysql/CMysqlSchema.php#258 (показать)
protected function findTableNames($schema='')
{
    if(
$schema==='')
        return 
$this->getDbConnection()->createCommand('SHOW TABLES')->queryColumn();
    
$names=$this->getDbConnection()->createCommand('SHOW TABLES FROM '.$this->quoteTableName($schema))->queryColumn();
    foreach(
$names as &$name)
        
$name=$schema.'.'.$name;
    return 
$names;
}

Возвращает все имена таблиц в базе данных.

getServerVersion() метод

protected float getServerVersion()
{return} float версия сервера.
Исходный код: framework/db/schema/mysql/CMysqlSchema.php#217 (показать)
protected function getServerVersion()
{
    
$version=$this->getDbConnection()->getAttribute(PDO::ATTR_SERVER_VERSION);
    
$digits=array();
    
preg_match('/(\d+)\.(\d+)\.(\d+)/', $version, $digits);
    return 
floatval($digits[1].'.'.$digits[2].$digits[3]);
}

loadTable() метод

protected CMysqlTableSchema loadTable(string $name)
$name string имя таблицы
{return} CMysqlTableSchema метаданные таблицы, зависящие от драйвера. Null, если таблица не существует.
Исходный код: framework/db/schema/mysql/CMysqlSchema.php#123 (показать)
protected function loadTable($name)
{
    
$table=new CMysqlTableSchema;
    
$this->resolveTableNames($table,$name);

    if(
$this->findColumns($table))
    {
        
$this->findConstraints($table);
        return 
$table;
    }
    else
        return 
null;
}

Загружает метаданные для указанной таблицы.

quoteSimpleColumnName() метод (доступен с версии v1.1.6)

public string quoteSimpleColumnName(string $name)
$name string имя столбца
{return} string правильно обрамленное имя столбца
Исходный код: framework/db/schema/mysql/CMysqlSchema.php#61 (показать)
public function quoteSimpleColumnName($name)
{
    return 
'`'.$name.'`';
}

Обрамляет имя столбца для использования в запросе. Простое имя столбца не содержит префикса.

quoteSimpleTableName() метод (доступен с версии v1.1.6)

public string quoteSimpleTableName(string $name)
$name string имя таблицы
{return} string правильно обрамленное имя таблицы
Исходный код: framework/db/schema/mysql/CMysqlSchema.php#49 (показать)
public function quoteSimpleTableName($name)
{
    return 
'`'.$name.'`';
}

Обрамляет имя таблицы для использования в запросе. Простое имя таблицы не содержит префикса схемы.

renameColumn() метод (доступен с версии v1.1.6)

public string renameColumn(string $table, string $name, string $newName)
$table string таблица, столбец которой требуется переименовать. Имя будет корректно обрамлено методом.
$name string старое имя столбца. Имя будет корректно обрамлено методом.
$newName string новое имя столбца. Имя будет корректно обрамлено методом.
{return} string SQL-запрос для переименования столбца БД.
Исходный код: framework/db/schema/mysql/CMysqlSchema.php#288 (показать)
public function renameColumn($table, $name, $newName)
{
    
$db=$this->getDbConnection();
    
$row=$db->createCommand('SHOW CREATE TABLE '.$db->quoteTableName($table))->queryRow();
    if(
$row===false)
        throw new 
CDbException(Yii::t('yii','Unable to find "{column}" in table "{table}".',array('{column}'=>$name,'{table}'=>$table)));
    if(isset(
$row['Create Table']))
        
$sql=$row['Create Table'];
    else
    {
        
$row=array_values($row);
        
$sql=$row[1];
    }
    if(
preg_match_all('/^\s*[`"](.*?)[`"]\s+(.*?),?$/m',$sql,$matches))
    {
        foreach(
$matches[1] as $i=>$c)
        {
            if(
$c===$name)
            {
                return 
"ALTER TABLE ".$db->quoteTableName($table)
                    . 
" CHANGE ".$db->quoteColumnName($name)
                    . 
' '.$db->quoteColumnName($newName).' '.$matches[2][$i];
            }
        }
    }

    
// try to give back a SQL anyway
    
return "ALTER TABLE ".$db->quoteTableName($table)
        . 
" CHANGE ".$db->quoteColumnName($name).' '.$newName;
}

Создает SQL-запрос для переименования столбца.

resetSequence() метод (доступен с версии v1.1)

public void resetSequence(CDbTableSchema $table, integer|null $value=NULL)
$table CDbTableSchema схема таблицы, последовательность первичного ключа которой будет сброшена
$value integer|null значение для первичного ключа следующей новой вставленной строки. Если не задано, следующий первичный ключ новой строки будет иметь максимальное значение первичного ключа плюс один (т.е. обрезка последовательности).
Исходный код: framework/db/schema/mysql/CMysqlSchema.php#89 (показать)
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();
}

Сбрасывает значение последовательности первичного ключа таблицы. Последовательность будет сброшена таким образом, что первичный ключ следующей новой вставленной строки будет иметь указанное значение или максимальное значение первичного ключа плюс один (т.е. обрезка последовательности).

resolveTableNames() метод

protected void resolveTableNames(CMysqlTableSchema $table, string $name)
$table CMysqlTableSchema экземпляр таблицы
$name string необрамленное имя таблицы
Исходный код: framework/db/schema/mysql/CMysqlSchema.php#142 (показать)
protected function resolveTableNames($table,$name)
{
    
$parts=explode('.',str_replace(array('`','"'),'',$name));
    if(isset(
$parts[1]))
    {
        
$table->schemaName=$parts[0];
        
$table->name=$parts[1];
        
$table->rawName=$this->quoteTableName($table->schemaName).'.'.$this->quoteTableName($table->name);
    }
    else
    {
        
$table->name=$parts[0];
        
$table->rawName=$this->quoteTableName($table->name);
    }
}

Генерирует различные виды имен таблиц.

© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CMysqlSchema

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API