類別 yii\db\mysql\Schema
Schema 類別用於從 MySQL 資料庫 (版本 4.1.x 和 5.x) 檢索元數據。
公共屬性
公共方法
受保護的方法
常數
常數 | 值 | 描述 | 定義於 |
---|---|---|---|
SCHEMA_CACHE_VERSION | 1 | 結構描述快取版本,用於在快取的資料格式變更時偵測快取值中的不相容性。 | yii\db\Schema |
TYPE_BIGINT | 'bigint' | yii\db\Schema | |
TYPE_BIGPK | 'bigpk' | yii\db\Schema | |
TYPE_BINARY | 'binary' | yii\db\Schema | |
TYPE_BOOLEAN | 'boolean' | yii\db\Schema | |
TYPE_CHAR | 'char' | yii\db\Schema | |
TYPE_DATE | 'date' | yii\db\Schema | |
TYPE_DATETIME | 'datetime' | yii\db\Schema | |
TYPE_DECIMAL | 'decimal' | yii\db\Schema | |
TYPE_DOUBLE | 'double' | yii\db\Schema | |
TYPE_FLOAT | 'float' | yii\db\Schema | |
TYPE_INTEGER | 'integer' | yii\db\Schema | |
TYPE_JSON | 'json' | yii\db\Schema | |
TYPE_MONEY | 'money' | yii\db\Schema | |
TYPE_PK | 'pk' | yii\db\Schema | |
TYPE_SMALLINT | 'smallint' | yii\db\Schema | |
TYPE_STRING | 'string' | yii\db\Schema | |
TYPE_TEXT | 'text' | yii\db\Schema | |
TYPE_TIME | 'time' | yii\db\Schema | |
TYPE_TIMESTAMP | 'timestamp' | yii\db\Schema | |
TYPE_TINYINT | 'tinyint' | yii\db\Schema | |
TYPE_UBIGPK | 'ubigpk' | yii\db\Schema | |
TYPE_UPK | 'upk' | yii\db\Schema |
屬性詳細資訊
用於引用資料行名稱的字元。 如果開始和結束字元不同,則可以使用 2 個字元的陣列。
資料行結構描述類別或類別配置
用於引用結構描述、表格等名稱的字元。 如果開始和結束字元不同,則可以使用 2 個字元的陣列。
從實體資料行類型(鍵)到抽象資料行類型(值)的映射
'tinyint' => self::TYPE_TINYINT,
'bool' => self::TYPE_TINYINT,
'boolean' => self::TYPE_TINYINT,
'bit' => self::TYPE_INTEGER,
'smallint' => self::TYPE_SMALLINT,
'mediumint' => self::TYPE_INTEGER,
'int' => self::TYPE_INTEGER,
'integer' => self::TYPE_INTEGER,
'bigint' => self::TYPE_BIGINT,
'float' => self::TYPE_FLOAT,
'double' => self::TYPE_DOUBLE,
'double precision' => self::TYPE_DOUBLE,
'real' => self::TYPE_FLOAT,
'decimal' => self::TYPE_DECIMAL,
'numeric' => self::TYPE_DECIMAL,
'dec' => self::TYPE_DECIMAL,
'fixed' => self::TYPE_DECIMAL,
'tinytext' => self::TYPE_TEXT,
'mediumtext' => self::TYPE_TEXT,
'longtext' => self::TYPE_TEXT,
'longblob' => self::TYPE_BINARY,
'blob' => self::TYPE_BINARY,
'text' => self::TYPE_TEXT,
'varchar' => self::TYPE_STRING,
'string' => self::TYPE_STRING,
'char' => self::TYPE_CHAR,
'datetime' => self::TYPE_DATETIME,
'year' => self::TYPE_DATE,
'date' => self::TYPE_DATE,
'time' => self::TYPE_TIME,
'timestamp' => self::TYPE_TIMESTAMP,
'enum' => self::TYPE_STRING,
'set' => self::TYPE_STRING,
'binary' => self::TYPE_BINARY,
'varbinary' => self::TYPE_BINARY,
'json' => self::TYPE_JSON,
]
方法詳細資訊
public mixed __call ( $name, $params ) | ||
$name | string |
方法名稱 |
$params | array |
方法參數 |
return | mixed |
方法傳回值 |
---|---|---|
throws | yii\base\UnknownMethodException |
當呼叫未知方法時 |
public function __call($name, $params)
{
throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}
定義於: yii\base\BaseObject::__construct()
建構子。
預設實作會執行兩件事
- 使用給定的組態
$config
初始化物件。 - 呼叫 init()。
如果此方法在子類別中被覆寫,建議
- 建構子的最後一個參數是組態陣列,例如此處的
$config
。 - 在建構子的結尾呼叫父類別實作。
public void __construct ( $config = [] ) | ||
$config | array |
將用於初始化物件屬性的名稱-值對 |
public function __construct($config = [])
{
if (!empty($config)) {
Yii::configure($this, $config);
}
$this->init();
}
定義於: yii\base\BaseObject::__get()
傳回物件屬性的值。
請勿直接呼叫此方法,因為它是 PHP 魔術方法,當執行 $value = $object->property;
時,它會被隱式呼叫。
另請參閱 __set()。
public mixed __get ( $name ) | ||
$name | string |
屬性名稱 |
return | mixed |
屬性值 |
---|---|---|
throws | yii\base\UnknownPropertyException |
如果未定義屬性 |
throws | yii\base\InvalidCallException |
如果屬性為唯寫 |
public function __get($name)
{
$getter = 'get' . $name;
if (method_exists($this, $getter)) {
return $this->$getter();
} elseif (method_exists($this, 'set' . $name)) {
throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
}
throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}
定義於: yii\base\BaseObject::__isset()
檢查屬性是否已設定,即已定義且非 null。
請勿直接呼叫此方法,因為它是 PHP 魔術方法,當執行 isset($object->property)
時,它會被隱式呼叫。
請注意,如果未定義屬性,將傳回 false。
public boolean __isset ( $name ) | ||
$name | string |
屬性名稱或事件名稱 |
return | boolean |
具名屬性是否已設定(非 null)。 |
---|
public function __isset($name)
{
$getter = 'get' . $name;
if (method_exists($this, $getter)) {
return $this->$getter() !== null;
}
return false;
}
定義於: yii\base\BaseObject::__set()
設定物件屬性的值。
請勿直接呼叫此方法,因為它是 PHP 魔術方法,當執行 $object->property = $value;
時,它會被隱式呼叫。
另請參閱 __get()。
public void __set ( $name, $value ) | ||
$name | string |
屬性名稱或事件名稱 |
$value | mixed |
屬性值 |
throws | yii\base\UnknownPropertyException |
如果未定義屬性 |
---|---|---|
throws | yii\base\InvalidCallException |
如果屬性為唯讀 |
public function __set($name, $value)
{
$setter = 'set' . $name;
if (method_exists($this, $setter)) {
$this->$setter($value);
} elseif (method_exists($this, 'get' . $name)) {
throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
} else {
throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}
}
定義於: yii\base\BaseObject::__unset()
將物件屬性設為 null。
請勿直接呼叫此方法,因為它是 PHP 魔術方法,當執行 unset($object->property)
時,它會被隱式呼叫。
請注意,如果未定義屬性,此方法將不執行任何操作。 如果屬性為唯讀,它將擲回例外。
public void __unset ( $name ) | ||
$name | string |
屬性名稱 |
throws | yii\base\InvalidCallException |
如果屬性為唯讀。 |
---|
public function __unset($name)
{
$setter = 'set' . $name;
if (method_exists($this, $setter)) {
$this->$setter(null);
} elseif (method_exists($this, 'get' . $name)) {
throw new InvalidCallException('Unsetting read-only property: ' . get_class($this) . '::' . $name);
}
}
定義於: yii\base\BaseObject::canGetProperty()
傳回一個值,指示屬性是否可讀取。
如果屬性可讀取:
- 類別具有與指定名稱關聯的 getter 方法(在此情況下,屬性名稱不區分大小寫);
- 類別具有具有指定名稱的成員變數(當
$checkVars
為 true 時);
另請參閱 canSetProperty()。
public boolean canGetProperty ( $name, $checkVars = true ) | ||
$name | string |
屬性名稱 |
$checkVars | boolean |
是否將成員變數視為屬性 |
return | boolean |
是否可以讀取屬性 |
---|
public function canGetProperty($name, $checkVars = true)
{
return method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name);
}
定義於: yii\base\BaseObject::canSetProperty()
傳回一個值,指示屬性是否可設定。
如果屬性可寫入:
- 類別具有與指定名稱關聯的 setter 方法(在此情況下,屬性名稱不區分大小寫);
- 類別具有具有指定名稱的成員變數(當
$checkVars
為 true 時);
另請參閱 canGetProperty()。
public boolean canSetProperty ( $name, $checkVars = true ) | ||
$name | string |
屬性名稱 |
$checkVars | boolean |
是否將成員變數視為屬性 |
return | boolean |
是否可以寫入屬性 |
---|
public function canSetProperty($name, $checkVars = true)
{
return method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name);
}
::class
。
定義於: yii\base\BaseObject::className()
傳回此類別的完整名稱。
public static string className ( ) | ||
return | string |
此類別的完整名稱。 |
---|
public static function className()
{
return get_called_class();
}
定義於: yii\db\Schema::convertException()
如果可能,將資料庫例外轉換為更具體的例外。
public yii\db\Exception convertException ( Exception $e, $rawSql ) | ||
$e | 例外 | |
$rawSql | string |
產生例外的 SQL |
public function convertException(\Exception $e, $rawSql)
{
if ($e instanceof Exception) {
return $e;
}
$exceptionClass = '\yii\db\Exception';
foreach ($this->exceptionMap as $error => $class) {
if (strpos($e->getMessage(), $error) !== false) {
$exceptionClass = $class;
}
}
$message = $e->getMessage() . "\nThe SQL being executed was: $rawSql";
$errorInfo = $e instanceof \PDOException ? $e->errorInfo : null;
return new $exceptionClass($message, $errorInfo, $e->getCode(), $e);
}
protected yii\db\ColumnSchema createColumnSchema ( ) | ||
return | yii\db\ColumnSchema |
資料行結構描述實例。 |
---|---|---|
throws | yii\base\InvalidConfigException |
如果無法建立資料行結構描述類別。 |
protected function createColumnSchema()
{
return Yii::createObject($this->columnSchemaClass);
}
建立資料行結構描述產生器實例,並給定類型和值精確度。
子類別可以覆寫此方法,以建立特定於 DBMS 的資料行結構描述產生器。
public yii\db\ColumnSchemaBuilder createColumnSchemaBuilder ( $type, $length = null ) | ||
$type | string |
資料行的類型。 請參閱 yii\db\mysql\ColumnSchemaBuilder::$type。 |
$length | integer|string|array|null |
資料行的長度或精確度。 請參閱 yii\db\mysql\ColumnSchemaBuilder::$length。 |
return | yii\db\ColumnSchemaBuilder |
資料行結構描述產生器實例 |
---|
public function createColumnSchemaBuilder($type, $length = null)
{
return Yii::createObject(ColumnSchemaBuilder::className(), [$type, $length, $this->db]);
}
為 MySQL 資料庫建立查詢產生器。
public yii\db\mysql\QueryBuilder createQueryBuilder ( ) | ||
return | yii\db\mysql\QueryBuilder |
查詢語法建構器實例 |
---|
public function createQueryBuilder()
{
return Yii::createObject(QueryBuilder::className(), [$this->db]);
}
定義於: yii\db\Schema::createSavepoint()
建立新的儲存點。
public void createSavepoint ( $name ) | ||
$name | string |
儲存點名稱 |
public function createSavepoint($name)
{
$this->db->createCommand("SAVEPOINT $name")->execute();
}
收集表格資料行的元數據。
protected boolean findColumns ( $table ) | ||
$table | yii\db\TableSchema |
資料表的中繼資料 |
return | boolean |
資料表是否存在於資料庫中 |
---|---|---|
throws | 例外 |
如果資料庫查詢失敗 |
protected function findColumns($table)
{
$sql = 'SHOW FULL COLUMNS FROM ' . $this->quoteTableName($table->fullName);
try {
$columns = $this->db->createCommand($sql)->queryAll();
} catch (\Exception $e) {
$previous = $e->getPrevious();
if ($previous instanceof \PDOException && strpos($previous->getMessage(), 'SQLSTATE[42S02') !== false) {
// table does not exist
// https://mysqldev.dev.org.tw/doc/refman/5.5/en/error-messages-server.html#error_er_bad_table_error
return false;
}
throw $e;
}
foreach ($columns as $info) {
if ($this->db->slavePdo->getAttribute(\PDO::ATTR_CASE) !== \PDO::CASE_LOWER) {
$info = array_change_key_case($info, CASE_LOWER);
}
$column = $this->loadColumnSchema($info);
$table->columns[$column->name] = $column;
if ($column->isPrimaryKey) {
$table->primaryKey[] = $column->name;
if ($column->autoIncrement) {
$table->sequenceName = '';
}
}
}
return true;
}
收集給定表格的外鍵資料行詳細資訊。
protected void findConstraints ( $table ) | ||
$table | yii\db\TableSchema |
資料表的中繼資料 |
throws | 例外 |
---|
protected function findConstraints($table)
{
$sql = <<<'SQL'
CT
`kcu`.`CONSTRAINT_NAME` AS `constraint_name`,
`kcu`.`COLUMN_NAME` AS `column_name`,
`kcu`.`REFERENCED_TABLE_NAME` AS `referenced_table_name`,
`kcu`.`REFERENCED_COLUMN_NAME` AS `referenced_column_name`
`information_schema`.`REFERENTIAL_CONSTRAINTS` AS `rc`
`information_schema`.`KEY_COLUMN_USAGE` AS `kcu` ON
(
`kcu`.`CONSTRAINT_CATALOG` = `rc`.`CONSTRAINT_CATALOG` OR
(`kcu`.`CONSTRAINT_CATALOG` IS NULL AND `rc`.`CONSTRAINT_CATALOG` IS NULL)
) AND
`kcu`.`CONSTRAINT_SCHEMA` = `rc`.`CONSTRAINT_SCHEMA` AND
`kcu`.`CONSTRAINT_NAME` = `rc`.`CONSTRAINT_NAME`
E `rc`.`CONSTRAINT_SCHEMA` = database() AND `kcu`.`TABLE_SCHEMA` = database()
`rc`.`TABLE_NAME` = :tableName AND `kcu`.`TABLE_NAME` = :tableName1
try {
$rows = $this->db->createCommand($sql, [':tableName' => $table->name, ':tableName1' => $table->name])->queryAll();
$constraints = [];
foreach ($rows as $row) {
$constraints[$row['constraint_name']]['referenced_table_name'] = $row['referenced_table_name'];
$constraints[$row['constraint_name']]['columns'][$row['column_name']] = $row['referenced_column_name'];
}
$table->foreignKeys = [];
foreach ($constraints as $name => $constraint) {
$table->foreignKeys[$name] = array_merge(
[$constraint['referenced_table_name']],
$constraint['columns']
);
}
} catch (\Exception $e) {
$previous = $e->getPrevious();
if (!$previous instanceof \PDOException || strpos($previous->getMessage(), 'SQLSTATE[42S02') === false) {
throw $e;
}
// table does not exist, try to determine the foreign keys using the table creation sql
$sql = $this->getCreateTableSql($table);
$regexp = '/FOREIGN KEY\s+\(([^\)]+)\)\s+REFERENCES\s+([^\(^\s]+)\s*\(([^\)]+)\)/mi';
if (preg_match_all($regexp, $sql, $matches, PREG_SET_ORDER)) {
foreach ($matches as $match) {
$fks = array_map('trim', explode(',', str_replace(['`', '"'], '', $match[1])));
$pks = array_map('trim', explode(',', str_replace(['`', '"'], '', $match[3])));
$constraint = [str_replace(['`', '"'], '', $match[2])];
foreach ($fks as $k => $name) {
$constraint[$name] = $pks[$k];
}
$table->foreignKeys[md5(serialize($constraint))] = $constraint;
}
$table->foreignKeys = array_values($table->foreignKeys);
}
}
}
定義於: yii\db\Schema::findSchemaNames()
傳回資料庫中所有結構描述名稱,包括預設結構描述,但不包括系統結構描述。
這個方法應該被子類別覆寫以支援此功能,因為預設的實作只會拋出例外。
protected array findSchemaNames ( ) | ||
return | array |
資料庫中的所有結構描述名稱,系統結構描述除外。 |
---|---|---|
throws | yii\base\NotSupportedException |
如果 DBMS 不支援此方法。 |
protected function findSchemaNames()
{
throw new NotSupportedException(get_class($this) . ' does not support fetching all schema names.');
}
傳回資料庫中的所有表格名稱。
這個方法應該被子類別覆寫以支援此功能,因為預設的實作只會拋出例外。
protected array findTableNames ( $schema = '' ) | ||
$schema | string |
資料表的 schema。預設為空字串,表示目前的或預設的 schema。 |
return | array |
資料庫中所有的資料表名稱。名稱不包含 schema 名稱前綴。 |
---|---|---|
throws | yii\base\NotSupportedException |
如果 DBMS 不支援此方法。 |
protected function findTableNames($schema = '')
{
$sql = 'SHOW TABLES';
if ($schema !== '') {
$sql .= ' FROM ' . $this->quoteSimpleTableName($schema);
}
return $this->db->createCommand($sql)->queryColumn();
}
傳回給定表格的所有唯一索引。
每個陣列元素都是以下結構
[
'IndexName1' => ['col1' [, ...]],
'IndexName2' => ['col2' [, ...]],
]
public array findUniqueIndexes ( $table ) | ||
$table | yii\db\TableSchema |
資料表的中繼資料 |
return | array |
給定資料表的所有唯一索引。 |
---|
public function findUniqueIndexes($table)
{
$sql = $this->getCreateTableSql($table);
$uniqueIndexes = [];
$regexp = '/UNIQUE KEY\s+[`"](.+)[`"]\s*\(([`"].+[`"])+\)/mi';
if (preg_match_all($regexp, $sql, $matches, PREG_SET_ORDER)) {
foreach ($matches as $match) {
$indexName = $match[1];
$indexColumns = array_map('trim', preg_split('/[`"],[`"]/', trim($match[2], '`"')));
$uniqueIndexes[$indexName] = $indexColumns;
}
}
return $uniqueIndexes;
}
定義於: yii\db\Schema::getCacheKey()
傳回指定表格名稱的快取鍵。
protected mixed getCacheKey ( $name ) | ||
$name | string |
資料表名稱。 |
return | mixed |
快取鍵。 |
---|
protected function getCacheKey($name)
{
return [
__CLASS__,
$this->db->dsn,
$this->db->username,
$this->getRawTableName($name),
];
}
protected string getCacheTag ( ) | ||
return | string |
快取標籤名稱 |
---|
protected function getCacheTag()
{
return md5(serialize([
__CLASS__,
$this->db->dsn,
$this->db->username,
]));
}
定義於: yii\db\Schema::getColumnPhpType()
從抽象資料庫類型中提取 PHP 類型。
protected string getColumnPhpType ( $column ) | ||
$column | yii\db\ColumnSchema |
欄位結構資訊 |
return | string |
PHP 型別名稱 |
---|
protected function getColumnPhpType($column)
{
static $typeMap = [
// abstract type => php type
self::TYPE_TINYINT => 'integer',
self::TYPE_SMALLINT => 'integer',
self::TYPE_INTEGER => 'integer',
self::TYPE_BIGINT => 'integer',
self::TYPE_BOOLEAN => 'boolean',
self::TYPE_FLOAT => 'double',
self::TYPE_DOUBLE => 'double',
self::TYPE_BINARY => 'resource',
self::TYPE_JSON => 'array',
];
if (isset($typeMap[$column->type])) {
if ($column->type === 'bigint') {
return PHP_INT_SIZE === 8 && !$column->unsigned ? 'integer' : 'string';
} elseif ($column->type === 'integer') {
return PHP_INT_SIZE === 4 && $column->unsigned ? 'string' : 'integer';
}
return $typeMap[$column->type];
}
return 'string';
}
取得 CREATE TABLE sql 字串。
protected string getCreateTableSql ( $table ) | ||
$table | yii\db\TableSchema |
資料表的中繼資料 |
return | string |
$sql 'SHOW CREATE TABLE' 的結果 |
---|
protected function getCreateTableSql($table)
{
$row = $this->db->createCommand('SHOW CREATE TABLE ' . $this->quoteTableName($table->fullName))->queryOne();
if (isset($row['Create Table'])) {
$sql = $row['Create Table'];
} else {
$row = array_values($row);
$sql = $row[1];
}
return $sql;
}
定義於: yii\db\Schema::getLastInsertID()
傳回最後插入的列或序列值的 ID。
另請參閱 https://php.dev.org.tw/manual/en/function.PDO-lastInsertId.php。
public string getLastInsertID ( $sequenceName = '' ) | ||
$sequenceName | string |
序列物件的名稱 (某些 DBMS 需要) |
return | string |
最後插入的列的列 ID,或從序列物件檢索的最後一個值 |
---|---|---|
throws | yii\base\InvalidCallException |
如果資料庫連線未啟用 |
public function getLastInsertID($sequenceName = '')
{
if ($this->db->isActive) {
return $this->db->pdo->lastInsertId($sequenceName === '' ? null : $this->quoteTableName($sequenceName));
}
throw new InvalidCallException('DB Connection is not active.');
}
定義於: yii\db\Schema::getPdoType()
判斷給定 PHP 資料值的 PDO 類型。
public integer getPdoType ( $data ) | ||
$data | mixed |
要判斷 PDO 型別的資料 |
return | integer |
PDO 型別 |
---|
public function getPdoType($data)
{
static $typeMap = [
// php type => PDO type
'boolean' => \PDO::PARAM_BOOL,
'integer' => \PDO::PARAM_INT,
'string' => \PDO::PARAM_STR,
'resource' => \PDO::PARAM_LOB,
'NULL' => \PDO::PARAM_NULL,
];
$type = gettype($data);
return isset($typeMap[$type]) ? $typeMap[$type] : \PDO::PARAM_STR;
}
public yii\db\QueryBuilder getQueryBuilder ( ) | ||
return | yii\db\QueryBuilder |
此連線的查詢建構器。 |
---|
public function getQueryBuilder()
{
if ($this->_builder === null) {
$this->_builder = $this->createQueryBuilder();
}
return $this->_builder;
}
定義於: yii\db\Schema::getRawTableName()
傳回給定表格名稱的實際名稱。
此方法將從給定的資料表名稱中移除大括號,並將百分比字元 '%' 替換為 yii\db\Connection::$tablePrefix。
public string getRawTableName ( $name ) | ||
$name | string |
要轉換的資料表名稱 |
return | string |
給定資料表名稱的真實名稱 |
---|
public function getRawTableName($name)
{
if (strpos($name, '{{') !== false) {
$name = preg_replace('/\\{\\{(.*?)\\}\\}/', '\1', $name);
return str_replace('%', $this->db->tablePrefix, $name);
}
return $name;
}
定義於: yii\db\ConstraintFinderTrait::getSchemaChecks()
傳回資料庫中所有表格的檢查約束。
public \yii\db\CheckConstraint[][] getSchemaChecks ( $schema = '', $refresh = false ) | ||
$schema | string |
資料表的 schema。預設為空字串,表示目前的或預設的 schema 名稱。 |
$refresh | boolean |
是否取得最新的可用資料表結構。如果為 false,則可能會傳回快取的資料(如果有的話)。 |
return | \yii\db\CheckConstraint[][] |
資料庫中所有資料表的檢查約束。每個陣列元素都是 yii\db\CheckConstraint 或其子類別的陣列。 |
---|
public function getSchemaChecks($schema = '', $refresh = false)
{
return $this->getSchemaMetadata($schema, 'checks', $refresh);
}
定義於: yii\db\ConstraintFinderTrait::getSchemaDefaultValues()
傳回資料庫中所有表格的預設值約束。
public yii\db\DefaultValueConstraint[] getSchemaDefaultValues ( $schema = '', $refresh = false ) | ||
$schema | string |
資料表的 schema。預設為空字串,表示目前的或預設的 schema 名稱。 |
$refresh | boolean |
是否取得最新的可用資料表結構。如果為 false,則可能會傳回快取的資料(如果有的話)。 |
return | yii\db\DefaultValueConstraint[] |
資料庫中所有資料表的預設值約束。每個陣列元素都是 yii\db\DefaultValueConstraint 或其子類別的陣列。 |
---|
public function getSchemaDefaultValues($schema = '', $refresh = false)
{
return $this->getSchemaMetadata($schema, 'defaultValues', $refresh);
}
定義於: yii\db\ConstraintFinderTrait::getSchemaForeignKeys()
傳回資料庫中所有表格的外鍵。
public \yii\db\ForeignKeyConstraint[][] getSchemaForeignKeys ( $schema = '', $refresh = false ) | ||
$schema | string |
資料表的 schema。預設為空字串,表示目前的或預設的 schema 名稱。 |
$refresh | boolean |
是否取得最新的可用資料表結構。如果為 false,則可能會傳回快取的資料(如果有的話)。 |
return | \yii\db\ForeignKeyConstraint[][] |
資料庫中所有資料表的外鍵。每個陣列元素都是 yii\db\ForeignKeyConstraint 或其子類別的陣列。 |
---|
public function getSchemaForeignKeys($schema = '', $refresh = false)
{
return $this->getSchemaMetadata($schema, 'foreignKeys', $refresh);
}
定義於: yii\db\ConstraintFinderTrait::getSchemaIndexes()
傳回資料庫中所有表格的索引。
public \yii\db\IndexConstraint[][] getSchemaIndexes ( $schema = '', $refresh = false ) | ||
$schema | string |
資料表的 schema。預設為空字串,表示目前的或預設的 schema 名稱。 |
$refresh | boolean |
是否取得最新的可用資料表結構。如果為 false,則可能會傳回快取的資料(如果有的話)。 |
return | \yii\db\IndexConstraint[][] |
資料庫中所有資料表的索引。每個陣列元素都是 yii\db\IndexConstraint 或其子類別的陣列。 |
---|
public function getSchemaIndexes($schema = '', $refresh = false)
{
return $this->getSchemaMetadata($schema, 'indexes', $refresh);
}
定義於: yii\db\ConstraintFinderTrait::getSchemaMetadata()
傳回給定結構描述中所有表格的給定類型元數據。
protected abstract array getSchemaMetadata ( $schema, $type, $refresh ) | ||
$schema | string |
中繼資料的 schema。預設為空字串,表示目前的或預設的 schema 名稱。 |
$type | string |
中繼資料型別。 |
$refresh | boolean |
是否取得最新的可用資料表後設資料。如果為 |
return | array |
中繼資料陣列。 |
---|
abstract protected function getSchemaMetadata($schema, $type, $refresh);
定義於: yii\db\Schema::getSchemaNames()
傳回資料庫中所有結構描述名稱,系統結構描述除外。
public string[] getSchemaNames ( $refresh = false ) | ||
$refresh | boolean |
是否取得最新的可用 schema 名稱。如果為 false,則會傳回先前取得的 schema 名稱(如果有的話)。 |
return | string[] |
資料庫中的所有結構描述名稱,系統結構描述除外。 |
---|
public function getSchemaNames($refresh = false)
{
if ($this->_schemaNames === null || $refresh) {
$this->_schemaNames = $this->findSchemaNames();
}
return $this->_schemaNames;
}
定義於: yii\db\ConstraintFinderTrait::getSchemaPrimaryKeys()
傳回資料庫中所有表格的主鍵。
public yii\db\Constraint[] getSchemaPrimaryKeys ( $schema = '', $refresh = false ) | ||
$schema | string |
資料表的 schema。預設為空字串,表示目前的或預設的 schema 名稱。 |
$refresh | boolean |
是否取得最新的可用資料表結構。如果為 |
return | yii\db\Constraint[] |
資料庫中所有資料表的主鍵。每個陣列元素都是 yii\db\Constraint 或其子類別的實例。 |
---|
public function getSchemaPrimaryKeys($schema = '', $refresh = false)
{
return $this->getSchemaMetadata($schema, 'primaryKey', $refresh);
}
定義於: yii\db\ConstraintFinderTrait::getSchemaUniques()
傳回資料庫中所有表格的唯一約束。
public \yii\db\Constraint[][] getSchemaUniques ( $schema = '', $refresh = false ) | ||
$schema | string |
資料表的 schema。預設為空字串,表示目前的或預設的 schema 名稱。 |
$refresh | boolean |
是否取得最新的可用資料表結構。如果為 false,則可能會傳回快取的資料(如果有的話)。 |
return | \yii\db\Constraint[][] |
資料庫中所有資料表的唯一約束。每個陣列元素都是 yii\db\Constraint 或其子類別的陣列。 |
---|
public function getSchemaUniques($schema = '', $refresh = false)
{
return $this->getSchemaMetadata($schema, 'uniques', $refresh);
}
定義於: yii\db\Schema::getServerVersion()
傳回伺服器版本,作為可由 \version_compare() 比較的字串。
public string getServerVersion ( ) | ||
return | string |
伺服器版本,以字串表示。 |
---|
public function getServerVersion()
{
if ($this->_serverVersion === null) {
$this->_serverVersion = $this->db->getSlavePdo(true)->getAttribute(\PDO::ATTR_SERVER_VERSION);
}
return $this->_serverVersion;
}
定義於: yii\db\ConstraintFinderTrait::getTableChecks()
取得具名表格的檢查約束資訊。
public yii\db\CheckConstraint[] getTableChecks ( $name, $refresh = false ) | ||
$name | string |
資料表名稱。資料表名稱可以包含 schema 名稱(如果有的話)。請勿加上引號。 |
$refresh | boolean |
是否重新載入資訊,即使快取中已存在。 |
return | yii\db\CheckConstraint[] |
資料表檢查約束。 |
---|
public function getTableChecks($name, $refresh = false)
{
return $this->getTableMetadata($name, 'checks', $refresh);
}
定義於: yii\db\ConstraintFinderTrait::getTableDefaultValues()
取得具名表格的預設值約束資訊。
public yii\db\DefaultValueConstraint[] getTableDefaultValues ( $name, $refresh = false ) | ||
$name | string |
資料表名稱。資料表名稱可以包含 schema 名稱(如果有的話)。請勿加上引號。 |
$refresh | boolean |
是否重新載入資訊,即使快取中已存在。 |
return | yii\db\DefaultValueConstraint[] |
資料表預設值約束。 |
---|
public function getTableDefaultValues($name, $refresh = false)
{
return $this->getTableMetadata($name, 'defaultValues', $refresh);
}
定義於: yii\db\ConstraintFinderTrait::getTableForeignKeys()
取得具名表格的外鍵資訊。
public yii\db\ForeignKeyConstraint[] getTableForeignKeys ( $name, $refresh = false ) | ||
$name | string |
資料表名稱。資料表名稱可以包含 schema 名稱(如果有的話)。請勿加上引號。 |
$refresh | boolean |
是否重新載入資訊,即使快取中已存在。 |
return | yii\db\ForeignKeyConstraint[] |
資料表外鍵。 |
---|
public function getTableForeignKeys($name, $refresh = false)
{
return $this->getTableMetadata($name, 'foreignKeys', $refresh);
}
定義於: yii\db\ConstraintFinderTrait::getTableIndexes()
取得具名表格的索引資訊。
public yii\db\IndexConstraint[] getTableIndexes ( $name, $refresh = false ) | ||
$name | string |
資料表名稱。資料表名稱可以包含 schema 名稱(如果有的話)。請勿加上引號。 |
$refresh | boolean |
是否重新載入資訊,即使快取中已存在。 |
return | yii\db\IndexConstraint[] |
資料表索引。 |
---|
public function getTableIndexes($name, $refresh = false)
{
return $this->getTableMetadata($name, 'indexes', $refresh);
}
定義於: yii\db\ConstraintFinderTrait::getTableMetadata()
傳回給定表格的給定類型元數據。
protected abstract mixed getTableMetadata ( $name, $type, $refresh ) | ||
$name | string |
資料表名稱。資料表名稱可以包含 schema 名稱(如果有的話)。請勿加上引號。 |
$type | string |
中繼資料型別。 |
$refresh | boolean |
是否重新載入資料表後設資料,即使快取中已存在。 |
return | mixed |
中繼資料。 |
---|
abstract protected function getTableMetadata($name, $type, $refresh);
定義於: yii\db\Schema::getTableNameParts()
將完整表格名稱分割成多個部分
protected array getTableNameParts ( $name ) | ||
$name | string |
protected function getTableNameParts($name)
{
return explode('.', $name);
}
定義於: yii\db\Schema::getTableNames()
傳回資料庫中的所有表格名稱。
public string[] getTableNames ( $schema = '', $refresh = false ) | ||
$schema | string |
資料表的 schema。預設為空字串,表示目前或預設的 schema 名稱。若不為空,則回傳的資料表名稱會加上 schema 名稱作為前綴。 |
$refresh | boolean |
是否取得最新的可用資料表名稱。若為 false,則會回傳先前取得的資料表名稱(若有的話)。 |
return | string[] |
資料庫中的所有表格名稱。 |
---|
public function getTableNames($schema = '', $refresh = false)
{
if (!isset($this->_tableNames[$schema]) || $refresh) {
$this->_tableNames[$schema] = $this->findTableNames($schema);
}
return $this->_tableNames[$schema];
}
定義於: yii\db\ConstraintFinderTrait::getTablePrimaryKey()
取得具名表格的主鍵。
public yii\db\Constraint|null getTablePrimaryKey ( $name, $refresh = false ) | ||
$name | string |
資料表名稱。資料表名稱可以包含 schema 名稱(如果有的話)。請勿加上引號。 |
$refresh | boolean |
是否重新載入資訊,即使快取中已存在。 |
return | yii\db\Constraint|null |
資料表主鍵,若資料表沒有主鍵則為 |
---|
public function getTablePrimaryKey($name, $refresh = false)
{
return $this->getTableMetadata($name, 'primaryKey', $refresh);
}
定義於: yii\db\Schema::getTableSchema()
取得具名表格的元數據。
public yii\db\TableSchema|null getTableSchema ( $name, $refresh = false ) | ||
$name | string |
資料表名稱。資料表名稱可以包含 schema 名稱(如果有的話)。請勿加上引號。 |
$refresh | boolean |
即使資料表 schema 已在快取中找到,是否重新載入。 |
return | yii\db\TableSchema|null |
資料表 metadata。若指定的資料表不存在則為 |
---|
public function getTableSchema($name, $refresh = false)
{
return $this->getTableMetadata($name, 'schema', $refresh);
}
定義於: yii\db\Schema::getTableSchemas()
傳回資料庫中所有表格的元數據。
public yii\db\TableSchema[] getTableSchemas ( $schema = '', $refresh = false ) | ||
$schema | string |
資料表的 schema。預設為空字串,表示目前的或預設的 schema 名稱。 |
$refresh | boolean |
是否取得最新的可用資料表結構。如果為 |
return | yii\db\TableSchema[] |
資料庫中所有資料表的 metadata。每個陣列元素都是 yii\db\TableSchema 或其子類別的實例。 |
---|
public function getTableSchemas($schema = '', $refresh = false)
{
return $this->getSchemaMetadata($schema, 'schema', $refresh);
}
定義於: yii\db\ConstraintFinderTrait::getTableUniques()
取得具名表格的唯一約束資訊。
public yii\db\Constraint[] getTableUniques ( $name, $refresh = false ) | ||
$name | string |
資料表名稱。資料表名稱可以包含 schema 名稱(如果有的話)。請勿加上引號。 |
$refresh | boolean |
是否重新載入資訊,即使快取中已存在。 |
return | yii\db\Constraint[] |
資料表唯一約束。 |
---|
public function getTableUniques($name, $refresh = false)
{
return $this->getTableMetadata($name, 'uniques', $refresh);
}
定義於: yii\base\BaseObject::hasMethod()
傳回一個值,指示是否已定義方法。
預設實作是呼叫 php 函數 method_exists()
。當您實作 php 魔術方法 __call()
時,您可以覆寫此方法。
public boolean hasMethod ( $name ) | ||
$name | string |
方法名稱 |
return | boolean |
方法是否已定義 |
---|
public function hasMethod($name)
{
return method_exists($this, $name);
}
定義於: yii\base\BaseObject::hasProperty()
傳回一個值,指示是否已定義屬性。
若符合以下條件,則屬性已定義
- 類別具有與指定名稱關聯的 getter 或 setter 方法(在此情況下,屬性名稱不區分大小寫);
- 類別具有具有指定名稱的成員變數(當
$checkVars
為 true 時);
參見
public boolean hasProperty ( $name, $checkVars = true ) | ||
$name | string |
屬性名稱 |
$checkVars | boolean |
是否將成員變數視為屬性 |
return | boolean |
屬性是否已定義 |
---|
public function hasProperty($name, $checkVars = true)
{
return $this->canGetProperty($name, $checkVars) || $this->canSetProperty($name, false);
}
public void init ( ) |
public function init()
{
}
執行 INSERT 命令,傳回主鍵值。
public array|false insert ( $table, $columns ) | ||
$table | string |
新資料列將插入的資料表。 |
$columns | array |
要插入資料表的欄位資料(名稱 => 值)。 |
return | array|false |
主鍵值,若指令失敗則為 false |
---|
public function insert($table, $columns)
{
$command = $this->db->createCommand()->insert($table, $columns);
if (!$command->execute()) {
return false;
}
$tableSchema = $this->getTableSchema($table);
$result = [];
foreach ($tableSchema->primaryKey as $name) {
if ($tableSchema->columns[$name]->autoIncrement) {
$result[$name] = $this->getLastInsertID($tableSchema->sequenceName);
break;
}
$result[$name] = isset($columns[$name]) ? $columns[$name] : $tableSchema->columns[$name]->defaultValue;
}
return $result;
}
protected boolean isOldMysql ( ) | ||
return | boolean |
正在使用的 MySQL 版本是否舊於 5.1。 |
---|---|---|
throws | yii\base\InvalidConfigException | |
throws | yii\db\Exception |
protected function isOldMysql()
{
if ($this->_oldMysql === null) {
$version = $this->db->getSlavePdo(true)->getAttribute(\PDO::ATTR_SERVER_VERSION);
$this->_oldMysql = version_compare($version, '5.1', '<=');
}
return $this->_oldMysql;
}
定義於: yii\db\Schema::isReadQuery()
傳回一個值,指示 SQL 陳述式是否用於讀取目的。
public boolean isReadQuery ( $sql ) | ||
$sql | string |
SQL 陳述式 |
return | boolean |
SQL 陳述式是否用於讀取目的。 |
---|
public function isReadQuery($sql)
{
$pattern = '/^\s*(SELECT|SHOW|DESCRIBE)\b/i';
return preg_match($pattern, $sql) > 0;
}
將資料行資訊載入到 yii\db\mysql\ColumnSchema 物件中。
protected yii\db\mysql\ColumnSchema loadColumnSchema ( $info ) | ||
$info | array |
欄位資訊 |
return | yii\db\mysql\ColumnSchema |
欄位 schema 物件 |
---|
protected function loadColumnSchema($info)
{
$column = $this->createColumnSchema();
$column->name = $info['field'];
$column->allowNull = $info['null'] === 'YES';
$column->isPrimaryKey = strpos($info['key'], 'PRI') !== false;
$column->autoIncrement = stripos($info['extra'], 'auto_increment') !== false;
$column->comment = $info['comment'];
$column->dbType = $info['type'];
$column->unsigned = stripos($column->dbType, 'unsigned') !== false;
$column->type = self::TYPE_STRING;
if (preg_match('/^(\w+)(?:\(([^\)]+)\))?/', $column->dbType, $matches)) {
$type = strtolower($matches[1]);
if (isset($this->typeMap[$type])) {
$column->type = $this->typeMap[$type];
}
if (!empty($matches[2])) {
if ($type === 'enum') {
preg_match_all("/'[^']*'/", $matches[2], $values);
foreach ($values[0] as $i => $value) {
$values[$i] = trim($value, "'");
}
$column->enumValues = $values;
} else {
$values = explode(',', $matches[2]);
$column->size = $column->precision = (int) $values[0];
if (isset($values[1])) {
$column->scale = (int) $values[1];
}
if ($column->size === 1 && $type === 'bit') {
$column->type = 'boolean';
} elseif ($type === 'bit') {
if ($column->size > 32) {
$column->type = 'bigint';
} elseif ($column->size === 32) {
$column->type = 'integer';
}
}
}
}
}
$column->phpType = $this->getColumnPhpType($column);
if (!$column->isPrimaryKey) {
/**
* When displayed in the INFORMATION_SCHEMA.COLUMNS table, a default CURRENT TIMESTAMP is displayed
* as CURRENT_TIMESTAMP up until MariaDB 10.2.2, and as current_timestamp() from MariaDB 10.2.3.
*
* See details here: https://mariadb.com/kb/en/library/now/#description
*/
if (
in_array($column->type, ['timestamp', 'datetime', 'date', 'time'])
&& isset($info['default'])
&& preg_match('/^current_timestamp(?:\(([0-9]*)\))?$/i', $info['default'], $matches)
) {
$column->defaultValue = new Expression('CURRENT_TIMESTAMP' . (!empty($matches[1]) ? '(' . $matches[1] . ')' : ''));
} elseif (isset($type) && $type === 'bit') {
$column->defaultValue = bindec(trim(isset($info['default']) ? $info['default'] : '', 'b\''));
} else {
$column->defaultValue = $column->phpTypecast($info['default']);
}
}
return $column;
}
protected void loadTableChecks ( $tableName ) | ||
$tableName | ||
throws | yii\base\NotSupportedException |
如果呼叫此方法。 |
---|
protected function loadTableChecks($tableName)
{
throw new NotSupportedException('MySQL does not support check constraints.');
}
protected void loadTableDefaultValues ( $tableName ) | ||
$tableName | ||
throws | yii\base\NotSupportedException |
如果呼叫此方法。 |
---|
protected function loadTableDefaultValues($tableName)
{
throw new NotSupportedException('MySQL does not support default value constraints.');
}
protected void loadTableForeignKeys ( $tableName ) | ||
$tableName |
protected function loadTableForeignKeys($tableName)
{
return $this->loadTableConstraints($tableName, 'foreignKeys');
}
protected void loadTableIndexes ( $tableName ) | ||
$tableName |
protected function loadTableIndexes($tableName)
{
static $sql = <<<'SQL'
CT
`s`.`INDEX_NAME` AS `name`,
`s`.`COLUMN_NAME` AS `column_name`,
`s`.`NON_UNIQUE` ^ 1 AS `index_is_unique`,
`s`.`INDEX_NAME` = 'PRIMARY' AS `index_is_primary`
`information_schema`.`STATISTICS` AS `s`
E `s`.`TABLE_SCHEMA` = COALESCE(:schemaName, DATABASE()) AND `s`.`INDEX_SCHEMA` = `s`.`TABLE_SCHEMA` AND `s`.`TABLE_NAME` = :tableName
R BY `s`.`SEQ_IN_INDEX` ASC
$resolvedName = $this->resolveTableName($tableName);
$indexes = $this->db->createCommand($sql, [
':schemaName' => $resolvedName->schemaName,
':tableName' => $resolvedName->name,
])->queryAll();
$indexes = $this->normalizePdoRowKeyCase($indexes, true);
$indexes = ArrayHelper::index($indexes, null, 'name');
$result = [];
foreach ($indexes as $name => $index) {
$result[] = new IndexConstraint([
'isPrimary' => (bool) $index[0]['index_is_primary'],
'isUnique' => (bool) $index[0]['index_is_unique'],
'name' => $name !== 'PRIMARY' ? $name : null,
'columnNames' => ArrayHelper::getColumn($index, 'column_name'),
]);
}
return $result;
}
protected void loadTablePrimaryKey ( $tableName ) | ||
$tableName |
protected function loadTablePrimaryKey($tableName)
{
return $this->loadTableConstraints($tableName, 'primaryKey');
}
載入指定表格的元數據。
protected yii\db\TableSchema|null loadTableSchema ( $name ) | ||
$name | string |
資料表名稱 |
return | yii\db\TableSchema|null |
DBMS 相依的資料表 metadata,若資料表不存在則為 |
---|
protected function loadTableSchema($name)
{
$table = new TableSchema();
$this->resolveTableNames($table, $name);
if ($this->findColumns($table)) {
$this->findConstraints($table);
return $table;
}
return null;
}
protected void loadTableUniques ( $tableName ) | ||
$tableName |
protected function loadTableUniques($tableName)
{
return $this->loadTableConstraints($tableName, 'uniques');
}
定義於: yii\db\Schema::normalizePdoRowKeyCase()
如果 PDO 的陣列鍵大小寫設定為大寫,則將列的陣列鍵大小寫變更為小寫。
protected array normalizePdoRowKeyCase ( array $row, $multiple ) | ||
$row | array |
資料列陣列或資料列陣列的陣列。 |
$multiple | boolean |
是否傳遞多個資料列或單個資料列。 |
return | array |
標準化的資料列或多個資料列。 |
---|
protected function normalizePdoRowKeyCase(array $row, $multiple)
{
if ($this->db->getSlavePdo(true)->getAttribute(\PDO::ATTR_CASE) !== \PDO::CASE_UPPER) {
return $row;
}
if ($multiple) {
return array_map(function (array $row) {
return array_change_key_case($row, CASE_LOWER);
}, $row);
}
return array_change_key_case($row, CASE_LOWER);
}
定義於: yii\db\Schema::quoteColumnName()
引用資料行名稱,以便在查詢中使用。
如果欄位名稱包含前綴,則前綴也會被正確地引用。如果欄位名稱已經被引用或包含 '('、'[[' 或 '{{',則此方法將不做任何處理。
另請參閱 quoteSimpleColumnName()。
public string quoteColumnName ( $name ) | ||
$name | string |
欄位名稱 |
return | string |
正確引用的欄位名稱 |
---|
public function quoteColumnName($name)
{
if (strpos($name, '(') !== false || strpos($name, '[[') !== false) {
return $name;
}
if (($pos = strrpos($name, '.')) !== false) {
$prefix = $this->quoteTableName(substr($name, 0, $pos)) . '.';
$name = substr($name, $pos + 1);
} else {
$prefix = '';
}
if (strpos($name, '{{') !== false) {
return $name;
}
return $prefix . $this->quoteSimpleColumnName($name);
}
定義於: yii\db\Schema::quoteSimpleColumnName()
引用簡單資料行名稱,以便在查詢中使用。
簡單欄位名稱應僅包含欄位名稱,不帶任何前綴。如果欄位名稱已經被引用或為星號字元 '*',則此方法將不做任何處理。
public string quoteSimpleColumnName ( $name ) | ||
$name | string |
欄位名稱 |
return | string |
正確引用的欄位名稱 |
---|
public function quoteSimpleColumnName($name)
{
if (is_string($this->columnQuoteCharacter)) {
$startingCharacter = $endingCharacter = $this->columnQuoteCharacter;
} else {
list($startingCharacter, $endingCharacter) = $this->columnQuoteCharacter;
}
return $name === '*' || strpos($name, $startingCharacter) !== false ? $name : $startingCharacter . $name . $endingCharacter;
}
定義於: yii\db\Schema::quoteSimpleTableName()
引用簡單表格名稱,以便在查詢中使用。
簡單資料表名稱應僅包含資料表名稱,不帶任何 schema 前綴。如果資料表名稱已經被引用,則此方法將不做任何處理。
public string quoteSimpleTableName ( $name ) | ||
$name | string |
資料表名稱 |
return | string |
正確引用的資料表名稱 |
---|
public function quoteSimpleTableName($name)
{
if (is_string($this->tableQuoteCharacter)) {
$startingCharacter = $endingCharacter = $this->tableQuoteCharacter;
} else {
list($startingCharacter, $endingCharacter) = $this->tableQuoteCharacter;
}
return strpos($name, $startingCharacter) !== false ? $name : $startingCharacter . $name . $endingCharacter;
}
定義於: yii\db\Schema::quoteTableName()
引用表格名稱,以便在查詢中使用。
如果資料表名稱包含 schema 前綴,則前綴也會被正確地引用。如果資料表名稱已經被引用或包含 '(' 或 '{{',則此方法將不做任何處理。
另請參閱 quoteSimpleTableName()。
public string quoteTableName ( $name ) | ||
$name | string |
資料表名稱 |
return | string |
正確引用的資料表名稱 |
---|
public function quoteTableName($name)
{
if (strncmp($name, '(', 1) === 0 && strpos($name, ')') === strlen($name) - 1) {
return $name;
}
if (strpos($name, '{{') !== false) {
return $name;
}
if (strpos($name, '.') === false) {
return $this->quoteSimpleTableName($name);
}
$parts = $this->getTableNameParts($name);
foreach ($parts as $i => $part) {
$parts[$i] = $this->quoteSimpleTableName($part);
}
return implode('.', $parts);
}
定義於: yii\db\Schema::quoteValue()
引用字串值,以便在查詢中使用。
請注意,如果參數不是字串,它將在不變更的情況下回傳。
另請參閱 https://php.dev.org.tw/manual/en/function.PDO-quote.php。
public string quoteValue ( $str ) | ||
$str | string |
要引用的字串 |
return | string |
正確引用的字串 |
---|
public function quoteValue($str)
{
if (!is_string($str)) {
return $str;
}
if (mb_stripos((string)$this->db->dsn, 'odbc:') === false && ($value = $this->db->getSlavePdo(true)->quote($str)) !== false) {
return $value;
}
// the driver doesn't support quote (e.g. oci)
return "'" . addcslashes(str_replace("'", "''", $str), "\000\n\r\\\032") . "'";
}
public void refresh ( ) |
public function refresh()
{
/* @var $cache CacheInterface */
$cache = is_string($this->db->schemaCache) ? Yii::$app->get($this->db->schemaCache, false) : $this->db->schemaCache;
if ($this->db->enableSchemaCache && $cache instanceof CacheInterface) {
TagDependency::invalidate($cache, $this->getCacheTag());
}
$this->_tableNames = [];
$this->_tableMetadata = [];
}
定義於: yii\db\Schema::refreshTableSchema()
重新整理特定的表格結構描述。
此方法清除快取的資料表 schema,以便稍後可以重新建立它,以反映資料庫 schema 的變更。
public void refreshTableSchema ( $name ) | ||
$name | string |
資料表名稱。 |
public function refreshTableSchema($name)
{
$rawName = $this->getRawTableName($name);
unset($this->_tableMetadata[$rawName]);
$this->_tableNames = [];
/* @var $cache CacheInterface */
$cache = is_string($this->db->schemaCache) ? Yii::$app->get($this->db->schemaCache, false) : $this->db->schemaCache;
if ($this->db->enableSchemaCache && $cache instanceof CacheInterface) {
$cache->delete($this->getCacheKey($rawName));
}
}
定義於: yii\db\Schema::releaseSavepoint()
釋放現有的儲存點。
public void releaseSavepoint ( $name ) | ||
$name | string |
儲存點名稱 |
public function releaseSavepoint($name)
{
$this->db->createCommand("RELEASE SAVEPOINT $name")->execute();
}
解析表格名稱和結構描述名稱(如果有的話)。
protected yii\db\TableSchema resolveTableName ( $name ) | ||
$name | string |
資料表名稱 |
return | yii\db\TableSchema |
yii\db\TableSchema,包含已解析的資料表、schema 等名稱。 |
---|---|---|
throws | yii\base\NotSupportedException |
如果 DBMS 不支援此方法。 |
protected function resolveTableName($name)
{
$resolvedName = new TableSchema();
$parts = explode('.', str_replace('`', '', $name));
if (isset($parts[1])) {
$resolvedName->schemaName = $parts[0];
$resolvedName->name = $parts[1];
} else {
$resolvedName->schemaName = $this->defaultSchema;
$resolvedName->name = $name;
}
$resolvedName->fullName = ($resolvedName->schemaName !== $this->defaultSchema ? $resolvedName->schemaName . '.' : '') . $resolvedName->name;
return $resolvedName;
}
解析表格名稱和結構描述名稱(如果有的話)。
protected void resolveTableNames ( $table, $name ) | ||
$table | yii\db\TableSchema |
資料表 metadata 物件 |
$name | string |
資料表名稱 |
protected function resolveTableNames($table, $name)
{
$parts = explode('.', str_replace('`', '', $name));
if (isset($parts[1])) {
$table->schemaName = $parts[0];
$table->name = $parts[1];
$table->fullName = $table->schemaName . '.' . $table->name;
} else {
$table->fullName = $table->name = $parts[0];
}
}
定義於: yii\db\Schema::rollBackSavepoint()
回滾到先前建立的儲存點。
public void rollBackSavepoint ( $name ) | ||
$name | string |
儲存點名稱 |
public function rollBackSavepoint($name)
{
$this->db->createCommand("ROLLBACK TO SAVEPOINT $name")->execute();
}
定義於: yii\db\Schema::setTableMetadata()
設定給定表格的給定類型元數據。
protected void setTableMetadata ( $name, $type, $data ) | ||
$name | string |
資料表名稱。 |
$type | string |
中繼資料型別。 |
$data | mixed |
中繼資料。 |
protected function setTableMetadata($name, $type, $data)
{
$this->_tableMetadata[$this->getRawTableName($name)][$type] = $data;
}
定義於: yii\db\Schema::setTransactionIsolationLevel()
設定目前交易的隔離級別。
另請參閱 https://en.wikipedia.org/wiki/Isolation_(database_systems)#Isolation_levels。
public void setTransactionIsolationLevel ( $level ) | ||
$level | string |
用於此交易的交易隔離等級。這可以是 yii\db\Transaction::READ_UNCOMMITTED、yii\db\Transaction::READ_COMMITTED、yii\db\Transaction::REPEATABLE_READ 和 yii\db\Transaction::SERIALIZABLE 其中之一,也可以是包含 DBMS 特定語法的字串,用於 |
public function setTransactionIsolationLevel($level)
{
$this->db->createCommand("SET TRANSACTION ISOLATION LEVEL $level")->execute();
}
public boolean supportsSavepoint ( ) | ||
return | boolean |
此 DBMS 是否支援 savepoint。 |
---|
public function supportsSavepoint()
{
return $this->db->enableSavepoint;
}
Defined in: yii\db\Schema::unquoteSimpleColumnName()
取消引用簡單資料行名稱。
簡單的資料行名稱應僅包含資料行名稱,不帶任何前綴。如果資料行名稱未被引號括起來,或是星號字元 '*',則此方法不會執行任何操作。
public string unquoteSimpleColumnName ( $name ) | ||
$name | string |
資料行名稱。 |
return | string |
未被引號括起來的資料行名稱。 |
---|
public function unquoteSimpleColumnName($name)
{
if (is_string($this->columnQuoteCharacter)) {
$startingCharacter = $this->columnQuoteCharacter;
} else {
$startingCharacter = $this->columnQuoteCharacter[0];
}
return strpos($name, $startingCharacter) === false ? $name : substr($name, 1, -1);
}
Defined in: yii\db\Schema::unquoteSimpleTableName()
取消引用簡單表格名稱。
簡單的資料表名稱應僅包含資料表名稱,不帶任何結構描述前綴。如果資料表名稱未被引號括起來,則此方法不會執行任何操作。
public string unquoteSimpleTableName ( $name ) | ||
$name | string |
資料表名稱。 |
return | string |
未被引號括起來的資料表名稱。 |
---|
public function unquoteSimpleTableName($name)
{
if (is_string($this->tableQuoteCharacter)) {
$startingCharacter = $this->tableQuoteCharacter;
} else {
$startingCharacter = $this->tableQuoteCharacter[0];
}
return strpos($name, $startingCharacter) === false ? $name : substr($name, 1, -1);
}
註冊 或 登入 以進行評論。