1 关注者

类 yii\db\Migration

继承yii\db\Migration » yii\base\Component » yii\base\BaseObject
实现yii\base\Configurable, yii\db\MigrationInterface
使用 Traitsyii\db\SchemaBuilderTrait
可用版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/db/Migration.php

Migration 是表示数据库迁移的基本类。

Migration 被设计为与“yii migrate”命令一起使用。

Migration 的每个子类都表示一个单独的数据库迁移,它由子类名标识。

在每个迁移中,up() 方法应该被重写以包含“升级”数据库的逻辑;而 down() 方法则用于“降级”逻辑。“yii migrate”命令管理应用程序中所有可用的迁移。

如果数据库支持事务,您也可以重写 safeUp()safeDown(),以便如果在升级或降级过程中出现任何错误,整个迁移可以完全回滚。

请注意,某些 DBMS 中的一些 DB 查询不能放入事务中。有关一些示例,请参阅 隐式提交。如果是这种情况,您仍然应该实现 up()down(),而不是。

Migration 提供了一组用于操作数据库数据和架构的便捷方法。例如,insert() 方法可用于轻松地将一行数据插入数据库表中;createTable() 方法可用于创建数据库表。与 yii\db\Command 中的相同方法相比,这些方法将显示额外的信息,显示方法参数和执行时间,这在应用迁移时可能会有用。

有关 Migration 的更多详细信息和使用信息,请参阅 关于 Migration 的指南文章

公共属性

隐藏继承的属性

属性 类型 描述 定义于
$behaviors yii\base\Behavior[] 附加到此组件的行为列表。 yii\base\Component
$compact boolean 指示是否应该压缩控制台输出。 yii\db\Migration
$db yii\db\Connection|array|string DB 连接对象或此迁移应使用的 DB 连接的应用程序组件 ID。 yii\db\Migration
$maxSqlOutputLength integer 输出的 SQL 的最大字符数。 yii\db\Migration

公共方法

隐藏继承的方法

方法 描述 定义于
__call() 调用不是类方法的命名方法。 yii\base\Component
__clone() 此方法是在通过克隆现有对象创建对象后调用的。 yii\base\Component
__construct() 构造函数。 yii\base\BaseObject
__get() 返回组件属性的值。 yii\base\Component
__isset() 检查是否设置了属性,即定义且不为 null。 yii\base\Component
__set() 设置组件属性的值。 yii\base\Component
__unset() 将组件属性设置为 null。 yii\base\Component
addColumn() 构建并执行添加新 DB 列的 SQL 语句。 yii\db\Migration
addCommentOnColumn() 构建并执行添加列注释的 SQL 语句。 yii\db\Migration
addCommentOnTable() 构建添加表注释的 SQL 语句。 yii\db\Migration
addForeignKey() 构建将外键约束添加到现有表的 SQL 语句。 yii\db\Migration
addPrimaryKey() 构建并执行创建主键的 SQL 语句。 yii\db\Migration
alterColumn() 构建并执行更改列定义的 SQL 语句。 yii\db\Migration
attachBehavior() 将行为附加到此组件。 yii\base\Component
attachBehaviors() 将行为列表附加到组件。 yii\base\Component
batchInsert() 创建并执行批处理 INSERT SQL 语句。 yii\db\Migration
behaviors() 返回此组件应该表现的行为列表。 yii\base\Component
bigInteger() 创建 bigint 列。 yii\db\SchemaBuilderTrait
bigPrimaryKey() 创建大的主键列。 yii\db\SchemaBuilderTrait
binary() 创建二进制列。 yii\db\SchemaBuilderTrait
boolean() 创建布尔列。 yii\db\SchemaBuilderTrait
canGetProperty() 返回一个值,指示是否可以读取属性。 yii\base\Component
canSetProperty() 返回一个值,指示是否可以设置属性。 yii\base\Component
char() 创建 char 列。 yii\db\SchemaBuilderTrait
className() 返回此类的完全限定名称。 yii\base\BaseObject
createIndex() 构建并执行创建新索引的 SQL 语句。 yii\db\Migration
createTable() 构建并执行创建新 DB 表的 SQL 语句。 yii\db\Migration
date() 创建日期列。 yii\db\SchemaBuilderTrait
dateTime() 创建日期时间列。 yii\db\SchemaBuilderTrait
decimal() 创建十进制列。 yii\db\SchemaBuilderTrait
delete() 创建并执行 DELETE SQL 语句。 yii\db\Migration
detachBehavior() 从组件中分离行为。 yii\base\Component
detachBehaviors() 从组件中分离所有行为。 yii\base\Component
double() 创建双精度列。 yii\db\SchemaBuilderTrait
down() 此方法包含在删除此迁移时要执行的逻辑。 yii\db\Migration
dropColumn() 构建并执行删除 DB 列的 SQL 语句。 yii\db\Migration
dropCommentFromColumn() 构建并执行从列中删除注释的 SQL 语句。 yii\db\Migration
dropCommentFromTable() 构建从表中删除注释的 SQL 语句。 yii\db\Migration
dropForeignKey() 构建删除外键约束的 SQL 语句。 yii\db\Migration
dropIndex() 构建并执行删除索引的 SQL 语句。 yii\db\Migration
dropPrimaryKey() 构建并执行删除主键的 SQL 语句。 yii\db\Migration
dropTable() 构建并执行删除 DB 表的 SQL 语句。 yii\db\Migration
ensureBehaviors() 确保在 behaviors() 中声明的行为附加到此组件。 yii\base\Component
execute() 执行 SQL 语句。 yii\db\Migration
float() 创建浮点列。 yii\db\SchemaBuilderTrait
getBehavior() 返回命名行为对象。 yii\base\Component
getBehaviors() 返回附加到此组件的所有行为。 yii\base\Component
hasEventHandlers() 返回一个值,指示是否将任何处理程序附加到命名事件。 yii\base\Component
hasMethod() 返回一个值,指示是否定义了方法。 yii\base\Component
hasProperty() 返回一个值,指示是否为该组件定义了属性。 yii\base\Component
init() 初始化迁移。 yii\db\Migration
insert() 创建并执行 INSERT SQL 语句。 yii\db\Migration
integer() 创建整数列。 yii\db\SchemaBuilderTrait
json() 创建 JSON 列。 yii\db\SchemaBuilderTrait
money() 创建货币列。 yii\db\SchemaBuilderTrait
off() 从此组件中分离现有的事件处理程序。 yii\base\Component
on() 将事件处理程序附加到事件。 yii\base\Component
primaryKey() 创建主键列。 yii\db\SchemaBuilderTrait
renameColumn() 构建并执行重命名列的 SQL 语句。 yii\db\Migration
renameTable() 构建并执行重命名 DB 表的 SQL 语句。 yii\db\Migration
safeDown() 此方法包含在删除此迁移时要执行的逻辑。 yii\db\Migration
safeUp() 此方法包含在应用此迁移时要执行的逻辑。 yii\db\Migration
smallInteger() 创建 smallint 列。 yii\db\SchemaBuilderTrait
string() 创建字符串列。 yii\db\SchemaBuilderTrait
text() 创建文本列。 yii\db\SchemaBuilderTrait
time() 创建时间列。 yii\db\SchemaBuilderTrait
timestamp() 创建时间戳列。 yii\db\SchemaBuilderTrait
tinyInteger() 创建 tinyint 列。如果 DBMS 不支持 tinyint,则将使用 smallint。 yii\db\SchemaBuilderTrait
trigger() 触发事件。 yii\base\Component
truncateTable() 构建并执行用于截断 DB 表的 SQL 语句。 yii\db\Migration
up() 此方法包含在应用此迁移时要执行的逻辑。 yii\db\Migration
update() 创建并执行 UPDATE SQL 语句。 yii\db\Migration
upsert() 创建并执行命令,如果数据库表中不存在行(匹配唯一约束),则将其插入,否则更新它们。 yii\db\Migration

受保护方法

隐藏继承的方法

方法 描述 定义于
beginCommand() 准备执行命令,并输出到控制台。 yii\db\Migration
endCommand() 命令执行完毕后完成,并输出到控制台经过的时间。 yii\db\Migration
getDb() yii\db\Migration

属性详细信息

隐藏继承的属性

$compact 公共属性(自版本 2.0.13 起可用)

指示控制台输出是否应该被压缩。如果设置为 true,则迁移中运行的各个命令将不会输出到控制台。默认值为 false,换句话说,默认情况下输出是完全详细的。

public boolean $compact false
$db 公共属性

DB 连接对象或此迁移应与其一起使用的 DB 连接的应用程序组件 ID。从版本 2.0.2 开始,这也可以是用于创建对象的配置数组。

请注意,当迁移对象由 migrate 命令创建时,此属性将被命令覆盖。如果您不想使用命令提供的 DB 连接,您可以覆盖 init() 方法,如下所示

public function init()
{
    $this->db = 'db2';
    parent::init();
}
$maxSqlOutputLength 公共属性(自版本 2.0.13 起可用)

输出的 SQL 的最大字符数。有助于减少长语句并使控制台输出更紧凑。

方法详细信息

隐藏继承的方法

__call() 公共方法

定义于: yii\base\Component::__call()

调用不是类方法的命名方法。

此方法将检查任何附加的行为是否具有命名方法,如果可用,则将执行该方法。

不要直接调用此方法,因为它是一个 PHP 魔术方法,当调用未知方法时,将隐式调用它。

public mixed __call ( $name, $params )
$name string

方法名称

$params array

方法参数

return mixed

方法返回值

throws yii\base\UnknownMethodException

调用未知方法时

                public function __call($name, $params)
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $object) {
        if ($object->hasMethod($name)) {
            return call_user_func_array([$object, $name], $params);
        }
    }
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__clone() 公共方法

定义于: yii\base\Component::__clone()

此方法是在通过克隆现有对象创建对象后调用的。

它会删除所有行为,因为它们附加到旧对象。

public void __clone ( )

                public function __clone()
{
    $this->_events = [];
    $this->_eventWildcards = [];
    $this->_behaviors = null;
}

            
__construct() 公共方法

定义于: 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();
}

            
__get() 公共方法

定义于: yii\base\Component::__get()

返回组件属性的值。

此方法将按照以下顺序检查并相应地采取行动

  • 由 getter 定义的属性:返回 getter 结果
  • 行为的属性:返回行为属性值

不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 $value = $component->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)) {
        // read property, e.g. getName()
        return $this->$getter();
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name;
        }
    }
    if (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);
}

            
__isset() 公共方法

定义于: yii\base\Component::__isset()

检查是否设置了属性,即定义且不为 null。

此方法将按照以下顺序检查并相应地采取行动

  • 由 setter 定义的属性:返回属性是否已设置
  • 行为的属性:返回属性是否已设置
  • 对于不存在的属性返回 false

不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 isset($component->property) 时,将隐式调用它。

另请参阅 https://php.ac.cn/manual/en/function.isset.php

public boolean __isset ( $name )
$name string

属性名称或事件名称

return boolean

命名的属性是否已设置

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name !== null;
        }
    }
    return false;
}

            
__set() 公共方法

定义于: yii\base\Component::__set()

设置组件属性的值。

此方法将按照以下顺序检查并相应地采取行动

  • 由 setter 定义的属性:设置属性值
  • "on xyz" 格式的事件:将处理程序附加到事件“xyz”
  • "as xyz" 格式的行为:附加名为“xyz”的行为
  • 行为的属性:设置行为属性值

不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 $component->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)) {
        // set property
        $this->$setter($value);
        return;
    } elseif (strncmp($name, 'on ', 3) === 0) {
        // on event: attach event handler
        $this->on(trim(substr($name, 3)), $value);
        return;
    } elseif (strncmp($name, 'as ', 3) === 0) {
        // as behavior: attach behavior
        $name = trim(substr($name, 3));
        $this->attachBehavior($name, $value instanceof Behavior ? $value : Yii::createObject($value));
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = $value;
            return;
        }
    }
    if (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}

            
__unset() 公共方法

定义于: yii\base\Component::__unset()

将组件属性设置为 null。

此方法将按照以下顺序检查并相应地采取行动

  • 由 setter 定义的属性:将属性值设置为 null
  • 行为的属性:将属性值设置为 null

不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行 unset($component->property) 时将被隐式调用。

另请参见 https://php.ac.cn/manual/en/function.unset.php.

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);
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = null;
            return;
        }
    }
    throw new InvalidCallException('Unsetting an unknown or read-only property: ' . get_class($this) . '::' . $name);
}

            
addColumn() 公共方法

构建并执行添加新 DB 列的 SQL 语句。

public void addColumn ( $table, $column, $type )
$table string

将添加新列的表。表名将由该方法正确引用。

$column string

新列的名称。名称将由该方法正确引用。

$type string

列类型。将调用 yii\db\QueryBuilder::getColumnType() 方法将抽象列类型(如果有)转换为物理类型。任何不被识别为抽象类型的类型都将保留在生成的 SQL 中。例如,'string' 将转换为 'varchar(255)',而 'string not null' 将变为 'varchar(255) not null'。

                public function addColumn($table, $column, $type)
{
    $time = $this->beginCommand("add column $column $type to table $table");
    $this->db->createCommand()->addColumn($table, $column, $type)->execute();
    if ($type instanceof ColumnSchemaBuilder && $type->comment !== null) {
        $this->db->createCommand()->addCommentOnColumn($table, $column, $type->comment)->execute();
    }
    $this->endCommand($time);
}

            
addCommentOnColumn() 公共方法 (自版本 2.0.8 起可用)

构建并执行添加列注释的 SQL 语句。

public void addCommentOnColumn ( $table, $column, $comment )
$table string

要添加注释的表的列。表名将由该方法正确引用。

$column string

要添加注释的列的名称。列名将由该方法正确引用。

$comment string

要添加的注释的文本。注释将由该方法正确引用。

                public function addCommentOnColumn($table, $column, $comment)
{
    $time = $this->beginCommand("add comment on column $column");
    $this->db->createCommand()->addCommentOnColumn($table, $column, $comment)->execute();
    $this->endCommand($time);
}

            
addCommentOnTable() 公共方法 (自版本 2.0.8 起可用)

构建添加表注释的 SQL 语句。

public void addCommentOnTable ( $table, $comment )
$table string

要添加注释的表。表名将由该方法正确引用。

$comment string

要添加的注释的文本。注释将由该方法正确引用。

                public function addCommentOnTable($table, $comment)
{
    $time = $this->beginCommand("add comment on table $table");
    $this->db->createCommand()->addCommentOnTable($table, $comment)->execute();
    $this->endCommand($time);
}

            
addForeignKey() 公共方法

构建将外键约束添加到现有表的 SQL 语句。

该方法将正确引用表和列名。

public void addForeignKey ( $name, $table, $columns, $refTable, $refColumns, $delete null, $update null )
$name string

外键约束的名称。

$table string

将添加外键约束的表。

$columns string|array

将添加约束的列的名称。如果有多个列,用逗号分隔它们或使用数组。

$refTable string

外键引用的表。

$refColumns string|array

外键引用的列的名称。如果有多个列,用逗号分隔它们或使用数组。

$delete string|null

ON DELETE 选项。大多数 DBMS 支持这些选项:RESTRICT、CASCADE、NO ACTION、SET DEFAULT、SET NULL

$update string|null

ON UPDATE 选项。大多数 DBMS 支持这些选项:RESTRICT、CASCADE、NO ACTION、SET DEFAULT、SET NULL

                public function addForeignKey($name, $table, $columns, $refTable, $refColumns, $delete = null, $update = null)
{
    $time = $this->beginCommand("add foreign key $name: $table (" . implode(',', (array) $columns) . ") references $refTable (" . implode(',', (array) $refColumns) . ')');
    $this->db->createCommand()->addForeignKey($name, $table, $columns, $refTable, $refColumns, $delete, $update)->execute();
    $this->endCommand($time);
}

            
addPrimaryKey() 公共方法

构建并执行创建主键的 SQL 语句。

该方法将正确引用表和列名。

public void addPrimaryKey ( $name, $table, $columns )
$name string

主键约束的名称。

$table string

将添加主键约束的表。

$columns string|array

主键将由其组成的列的逗号分隔字符串或数组。

                public function addPrimaryKey($name, $table, $columns)
{
    $time = $this->beginCommand("add primary key $name on $table (" . (is_array($columns) ? implode(',', $columns) : $columns) . ')');
    $this->db->createCommand()->addPrimaryKey($name, $table, $columns)->execute();
    $this->endCommand($time);
}

            
alterColumn() 公共方法

构建并执行更改列定义的 SQL 语句。

public void alterColumn ( $table, $column, $type )
$table string

要更改其列的表。表名将由该方法正确引用。

$column string

要更改的列的名称。名称将由该方法正确引用。

$type string

新的列类型。将调用 yii\db\QueryBuilder::getColumnType() 方法将抽象列类型(如果有)转换为物理类型。任何不被识别为抽象类型的类型都将保留在生成的 SQL 中。例如,'string' 将转换为 'varchar(255)',而 'string not null' 将变为 'varchar(255) not null'。

                public function alterColumn($table, $column, $type)
{
    $time = $this->beginCommand("alter column $column in table $table to $type");
    $this->db->createCommand()->alterColumn($table, $column, $type)->execute();
    if ($type instanceof ColumnSchemaBuilder && $type->comment !== null) {
        $this->db->createCommand()->addCommentOnColumn($table, $column, $type->comment)->execute();
    }
    $this->endCommand($time);
}

            
attachBehavior() 公共方法

定义于: yii\base\Component::attachBehavior()

将行为附加到此组件。

此方法将根据给定的配置创建行为对象。之后,将通过调用 yii\base\Behavior::attach() 方法将行为对象附加到此组件。

另请参见 detachBehavior().

public yii\base\Behavior attachBehavior ( $name, $behavior )
$name string

行为的名称。

$behavior string|array|yii\base\Behavior

行为配置。这可以是以下之一

return yii\base\Behavior

行为对象

                public function attachBehavior($name, $behavior)
{
    $this->ensureBehaviors();
    return $this->attachBehaviorInternal($name, $behavior);
}

            
attachBehaviors() 公共方法

定义于: yii\base\Component::attachBehaviors()

将行为列表附加到组件。

每个行为都以其名称为索引,并且应该是一个 yii\base\Behavior 对象,指定行为类的字符串,或用于创建行为的配置数组。

另请参见 attachBehavior().

public void attachBehaviors ( $behaviors )
$behaviors array

要附加到组件的行为列表

                public function attachBehaviors($behaviors)
{
    $this->ensureBehaviors();
    foreach ($behaviors as $name => $behavior) {
        $this->attachBehaviorInternal($name, $behavior);
    }
}

            
batchInsert() 公共方法

创建并执行批处理 INSERT SQL 语句。

该方法将正确地转义列名,并将要插入的值绑定。

public void batchInsert ( $table, $columns, $rows )
$table string

将插入新行的表。

$columns array

列名。

$rows array

要批量插入到表中的行

                public function batchInsert($table, $columns, $rows)
{
    $time = $this->beginCommand("insert into $table");
    $this->db->createCommand()->batchInsert($table, $columns, $rows)->execute();
    $this->endCommand($time);
}

            
beginCommand() 受保护方法 (version 2.0.13 之后可用)

准备执行命令,并输出到控制台。

protected float beginCommand ( $description )
$description string

命令的描述,将输出到控制台。

return float

命令执行之前的 时间,用于计算经过的时间。

                protected function beginCommand($description)
{
    if (!$this->compact) {
        echo "    > $description ...";
    }
    return microtime(true);
}

            
behaviors() 公共方法

定义于: yii\base\Component::behaviors()

返回此组件应该表现的行为列表。

子类可以覆盖此方法来指定它们想要表现的行为。

此方法的返回值应为行为对象的数组或以行为名称为索引的配置。行为配置可以是指定行为类的字符串,也可以是以下结构的数组

'behaviorName' => [
    'class' => 'BehaviorClass',
    'property1' => 'value1',
    'property2' => 'value2',
]

注意,行为类必须扩展自 yii\base\Behavior。行为可以使用名称或匿名方式附加。当数组键使用名称时,可以使用此名称,行为可以在以后使用 getBehavior() 获取或使用 detachBehavior() 分离。匿名行为不能被检索或分离。

在此方法中声明的行为将自动附加到组件(按需)。

public array behaviors ( )
return array

行为配置。

                public function behaviors()
{
    return [];
}

            
bigInteger() 公共方法 (version 2.0.6 之后可用)

定义于: yii\db\SchemaBuilderTrait::bigInteger()

创建 bigint 列。

public yii\db\ColumnSchemaBuilder bigInteger ( $length null )
$length integer|null

列大小或精度定义。如果 DBMS 不支持,此参数将被忽略。

return yii\db\ColumnSchemaBuilder

可以进一步定制的列实例。

                public function bigInteger($length = null)
{
    return $this->getDb()->getSchema()->createColumnSchemaBuilder(Schema::TYPE_BIGINT, $length);
}

            
bigPrimaryKey() 公共方法 (version 2.0.6 之后可用)

定义于: yii\db\SchemaBuilderTrait::bigPrimaryKey()

创建大的主键列。

public yii\db\ColumnSchemaBuilder bigPrimaryKey ( $length null )
$length integer|null

列大小或精度定义。如果 DBMS 不支持,此参数将被忽略。

return yii\db\ColumnSchemaBuilder

可以进一步定制的列实例。

                public function bigPrimaryKey($length = null)
{
    return $this->getDb()->getSchema()->createColumnSchemaBuilder(Schema::TYPE_BIGPK, $length);
}

            
binary() 公共方法 (version 2.0.6 之后可用)

定义于: yii\db\SchemaBuilderTrait::binary()

创建二进制列。

public yii\db\ColumnSchemaBuilder binary ( $length null )
$length integer|null

列大小或精度定义。如果 DBMS 不支持,此参数将被忽略。

return yii\db\ColumnSchemaBuilder

可以进一步定制的列实例。

                public function binary($length = null)
{
    return $this->getDb()->getSchema()->createColumnSchemaBuilder(Schema::TYPE_BINARY, $length);
}

            
boolean() 公共方法 (version 2.0.6 之后可用)

定义于: yii\db\SchemaBuilderTrait::boolean()

创建布尔列。

public yii\db\ColumnSchemaBuilder boolean ( )
return yii\db\ColumnSchemaBuilder

可以进一步定制的列实例。

                public function boolean()
{
    return $this->getDb()->getSchema()->createColumnSchemaBuilder(Schema::TYPE_BOOLEAN);
}

            
canGetProperty() 公共方法

定义于: yii\base\Component::canGetProperty()

返回一个值,指示是否可以读取属性。

属性可以读取,如果

  • 类具有与指定名称关联的 getter 方法(在这种情况下,属性名称不区分大小写);
  • 类具有与指定名称相同的成员变量(当 $checkVars 为真时);
  • 附加的行为具有给定名称的可读属性(当 $checkBehaviors 为真时)。

另见 canSetProperty().

public boolean canGetProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

$checkBehaviors boolean

是否将行为的属性视为此组件的属性

return boolean

属性是否可读

                public function canGetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canGetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
canSetProperty() 公共方法

定义于: yii\base\Component::canSetProperty()

返回一个值,指示是否可以设置属性。

属性可以写入,如果

  • 类具有与指定名称关联的 setter 方法(在这种情况下,属性名称不区分大小写);
  • 类具有与指定名称相同的成员变量(当 $checkVars 为真时);
  • 附加的行为具有给定名称的可写属性(当 $checkBehaviors 为真时)。

另见 canGetProperty().

public boolean canSetProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

$checkBehaviors boolean

是否将行为的属性视为此组件的属性

return boolean

属性是否可写

                public function canSetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canSetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
char() 公共方法 (version 2.0.8 之后可用)

定义于: yii\db\SchemaBuilderTrait::char()

创建 char 列。

public yii\db\ColumnSchemaBuilder char ( $length null )
$length integer|null

列大小定义,即最大字符串长度。如果 DBMS 不支持,此参数将被忽略。

return yii\db\ColumnSchemaBuilder

可以进一步定制的列实例。

                public function char($length = null)
{
    return $this->getDb()->getSchema()->createColumnSchemaBuilder(Schema::TYPE_CHAR, $length);
}

            
className() 公共静态方法
自 2.0.14 版本起已弃用。在 PHP >= 5.5 中,请使用 ::class 代替。

定义于: yii\base\BaseObject::className()

返回此类的完全限定名称。

public static string className ( )
return string

此类的完全限定名称。

                public static function className()
{
    return get_called_class();
}

            
createIndex() 公共方法

构建并执行创建新索引的 SQL 语句。

public void createIndex ( $name, $table, $columns, $unique false )
$name string

索引的名称。名称将由方法正确地引用。

$table string

将创建新索引的目标表。表名将由方法正确地引用。

$columns string|array

应包含在索引中的列(或列)。如果有多列,请用逗号分隔或使用数组。每个列名将由方法正确地引用。如果列名包含左括号“(”,则将跳过引用。

$unique boolean

是否在创建的索引上添加 UNIQUE 约束。

                public function createIndex($name, $table, $columns, $unique = false)
{
    $time = $this->beginCommand('create' . ($unique ? ' unique' : '') . " index $name on $table (" . implode(',', (array) $columns) . ')');
    $this->db->createCommand()->createIndex($name, $table, $columns, $unique)->execute();
    $this->endCommand($time);
}

            
createTable() 公共方法

构建并执行创建新 DB 表的 SQL 语句。

新表中的列应指定为名称-定义对(例如,'name' => 'string'),其中 name 代表列名,它将由方法正确地引用,而 definition 代表列类型,必须包含抽象的 DB 类型。

将调用 yii\db\QueryBuilder::getColumnType() 方法将任何抽象类型转换为物理类型。

如果仅用定义指定列(例如 'PRIMARY KEY (name, type)'),它将直接放入生成的 SQL 中。

示例用法: `php class m200000_000000_create_table_fruits extends \yii\db\Migration {

public function safeUp()
{
     $this->createTable('{{%fruits}}', [
         // ...
         'column_name double precision null default null',

public void createTable ( $table, $columns, $options null )
$table string

要创建的表的名称。名称将由方法正确地引用。

$columns array

新表中的列(name => definition)。

$options string|null

将附加到生成的 SQL 的附加 SQL 片段。

                public function createTable($table, $columns, $options = null)
{
    $time = $this->beginCommand("create table $table");
    $this->db->createCommand()->createTable($table, $columns, $options)->execute();
    foreach ($columns as $column => $type) {
        if ($type instanceof ColumnSchemaBuilder && $type->comment !== null) {
            $this->db->createCommand()->addCommentOnColumn($table, $column, $type->comment)->execute();
        }
    }
    $this->endCommand($time);
}

            
date() 公共方法(自 2.0.6 版本起可用)

定义于: yii\db\SchemaBuilderTrait::date()

创建日期列。

public yii\db\ColumnSchemaBuilder date ( )
return yii\db\ColumnSchemaBuilder

可以进一步定制的列实例。

                public function date()
{
    return $this->getDb()->getSchema()->createColumnSchemaBuilder(Schema::TYPE_DATE);
}

            
dateTime() 公共方法(自 2.0.6 版本起可用)

定义于: yii\db\SchemaBuilderTrait::dateTime()

创建日期时间列。

public yii\db\ColumnSchemaBuilder dateTime ( $precision null )
$precision integer|null

列值精度。传递给列类型的第一個参数,例如 DATETIME(precision)。如果 DBMS 不支持此参数,则它将被忽略。

return yii\db\ColumnSchemaBuilder

可以进一步定制的列实例。

                public function dateTime($precision = null)
{
    return $this->getDb()->getSchema()->createColumnSchemaBuilder(Schema::TYPE_DATETIME, $precision);
}

            
decimal() 公共方法(自 2.0.6 版本起可用)

定义于: yii\db\SchemaBuilderTrait::decimal()

创建十进制列。

public yii\db\ColumnSchemaBuilder decimal ( $precision null, $scale null )
$precision integer|null

列值精度,通常是总的数字位数。传递给列类型的第一個参数,例如 DECIMAL(precision, scale)。如果 DBMS 不支持此参数,则它将被忽略。

$scale integer|null

列值比例,通常是小数点后的数字位数。传递给列类型的第二个参数,例如 DECIMAL(precision, scale)。如果 DBMS 不支持此参数,则它将被忽略。

return yii\db\ColumnSchemaBuilder

可以进一步定制的列实例。

                public function decimal($precision = null, $scale = null)
{
    $length = [];
    if ($precision !== null) {
        $length[] = $precision;
    }
    if ($scale !== null) {
        $length[] = $scale;
    }
    return $this->getDb()->getSchema()->createColumnSchemaBuilder(Schema::TYPE_DECIMAL, $length);
}

            
delete() 公共方法

创建并执行 DELETE SQL 语句。

public void delete ( $table, $condition '', $params = [] )
$table string

将从中删除数据的表。

$condition array|string

将放在 WHERE 部分中的条件。请参考 yii\db\Query::where() 了解如何指定条件。

$params array

要绑定到查询的参数。

                public function delete($table, $condition = '', $params = [])
{
    $time = $this->beginCommand("delete from $table");
    $this->db->createCommand()->delete($table, $condition, $params)->execute();
    $this->endCommand($time);
}

            
detachBehavior() 公共方法

定义于: yii\base\Component::detachBehavior()

从组件中分离行为。

将调用行为的 yii\base\Behavior::detach() 方法。

public yii\base\Behavior|null detachBehavior ( $name )
$name string

行为的名称。

return yii\base\Behavior|null

分离的行为。如果行为不存在,则为 null。

                public function detachBehavior($name)
{
    $this->ensureBehaviors();
    if (isset($this->_behaviors[$name])) {
        $behavior = $this->_behaviors[$name];
        unset($this->_behaviors[$name]);
        $behavior->detach();
        return $behavior;
    }
    return null;
}

            
detachBehaviors() 公共方法

定义于: yii\base\Component::detachBehaviors()

从组件中分离所有行为。

public void detachBehaviors ( )

                public function detachBehaviors()
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $name => $behavior) {
        $this->detachBehavior($name);
    }
}

            
double() 公共方法(自 2.0.6 版本起可用)

定义于: yii\db\SchemaBuilderTrait::double()

创建双精度列。

public yii\db\ColumnSchemaBuilder double ( $precision null )
$precision integer|null

列值精度。传递给列类型的第一個参数,例如 DOUBLE(precision)。如果 DBMS 不支持此参数,则它将被忽略。

return yii\db\ColumnSchemaBuilder

可以进一步定制的列实例。

                public function double($precision = null)
{
    return $this->getDb()->getSchema()->createColumnSchemaBuilder(Schema::TYPE_DOUBLE, $precision);
}

            
down() 公共方法

此方法包含在删除此迁移时要执行的逻辑。

默认实现抛出异常,表明无法删除迁移。子类可以覆盖此方法,如果相应的迁移可以删除。

public false|void|mixed down ( )
return false|void|mixed

返回一个假值以指示迁移失败并且不应该继续执行。所有其他返回值都表示迁移成功。

                public function down()
{
    $transaction = $this->db->beginTransaction();
    try {
        if ($this->safeDown() === false) {
            $transaction->rollBack();
            return false;
        }
        $transaction->commit();
    } catch (\Exception $e) {
        $this->printException($e);
        $transaction->rollBack();
        return false;
    } catch (\Throwable $e) {
        $this->printException($e);
        $transaction->rollBack();
        return false;
    }
    return null;
}

            
dropColumn() 公共方法

构建并执行删除 DB 列的 SQL 语句。

public void dropColumn ( $table, $column )
$table string

要删除其列的表。该名称将由该方法正确引用。

$column string

要删除的列的名称。该名称将由该方法正确引用。

                public function dropColumn($table, $column)
{
    $time = $this->beginCommand("drop column $column from table $table");
    $this->db->createCommand()->dropColumn($table, $column)->execute();
    $this->endCommand($time);
}

            
dropCommentFromColumn() 公共方法 (从版本 2.0.8 开始可用)

构建并执行从列中删除注释的 SQL 语句。

public void dropCommentFromColumn ( $table, $column )
$table string

要添加注释的表的列。表名将由该方法正确引用。

$column string

要添加注释的列的名称。列名将由该方法正确引用。

                public function dropCommentFromColumn($table, $column)
{
    $time = $this->beginCommand("drop comment from column $column");
    $this->db->createCommand()->dropCommentFromColumn($table, $column)->execute();
    $this->endCommand($time);
}

            
dropCommentFromTable() 公共方法 (从版本 2.0.8 开始可用)

构建从表中删除注释的 SQL 语句。

public void dropCommentFromTable ( $table )
$table string

要添加注释的表的列。表名将由该方法正确引用。

                public function dropCommentFromTable($table)
{
    $time = $this->beginCommand("drop comment from table $table");
    $this->db->createCommand()->dropCommentFromTable($table)->execute();
    $this->endCommand($time);
}

            
dropForeignKey() 公共方法

构建删除外键约束的 SQL 语句。

public void dropForeignKey ( $name, $table )
$name string

要删除的外键约束的名称。该名称将由该方法正确引用。

$table string

要删除其外键的表。该名称将由该方法正确引用。

                public function dropForeignKey($name, $table)
{
    $time = $this->beginCommand("drop foreign key $name from table $table");
    $this->db->createCommand()->dropForeignKey($name, $table)->execute();
    $this->endCommand($time);
}

            
dropIndex() 公共方法

构建并执行删除索引的 SQL 语句。

public void dropIndex ( $name, $table )
$name string

要删除的索引的名称。该名称将由该方法正确引用。

$table string

要删除其索引的表。该名称将由该方法正确引用。

                public function dropIndex($name, $table)
{
    $time = $this->beginCommand("drop index $name on $table");
    $this->db->createCommand()->dropIndex($name, $table)->execute();
    $this->endCommand($time);
}

            
dropPrimaryKey() 公共方法

构建并执行删除主键的 SQL 语句。

public void dropPrimaryKey ( $name, $table )
$name string

要删除的主键约束的名称。

$table string

将从中删除主键约束的表。

                public function dropPrimaryKey($name, $table)
{
    $time = $this->beginCommand("drop primary key $name");
    $this->db->createCommand()->dropPrimaryKey($name, $table)->execute();
    $this->endCommand($time);
}

            
dropTable() 公共方法

构建并执行删除 DB 表的 SQL 语句。

public void dropTable ( $table )
$table string

要删除的表。该名称将由该方法正确引用。

                public function dropTable($table)
{
    $time = $this->beginCommand("drop table $table");
    $this->db->createCommand()->dropTable($table)->execute();
    $this->endCommand($time);
}

            
endCommand() 受保护方法 (从版本 2.0.13 开始可用)

命令执行完毕后完成,并输出到控制台经过的时间。

protected void endCommand ( $time )
$time float

执行命令之前的时间。

                protected function endCommand($time)
{
    if (!$this->compact) {
        echo ' done (time: ' . sprintf('%.3f', microtime(true) - $time) . "s)\n";
    }
}

            
ensureBehaviors() 公共方法

定义于: yii\base\Component::ensureBehaviors()

确保在 behaviors() 中声明的行为附加到此组件。

public void ensureBehaviors ( )

                public function ensureBehaviors()
{
    if ($this->_behaviors === null) {
        $this->_behaviors = [];
        foreach ($this->behaviors() as $name => $behavior) {
            $this->attachBehaviorInternal($name, $behavior);
        }
    }
}

            
execute() 公共方法

执行 SQL 语句。

此方法使用 $db 执行指定的 SQL 语句。

public void execute ( $sql, $params = [] )
$sql string

要执行的 SQL 语句

$params array

SQL 执行的输入参数(名称 => 值)。有关更多详细信息,请参阅 yii\db\Command::execute()

                public function execute($sql, $params = [])
{
    $sqlOutput = $sql;
    if ($this->maxSqlOutputLength !== null) {
        $sqlOutput = StringHelper::truncate($sql, $this->maxSqlOutputLength, '[... hidden]');
    }
    $time = $this->beginCommand("execute SQL: $sqlOutput");
    $this->db->createCommand($sql)->bindValues($params)->execute();
    $this->endCommand($time);
}

            
float() 公共方法 (从版本 2.0.6 开始可用)

定义于: yii\db\SchemaBuilderTrait::float()

创建浮点列。

public yii\db\ColumnSchemaBuilder float ( $precision null )
$precision integer|null

列值精度。传递给列类型的第一个参数,例如 FLOAT(precision)。如果 DBMS 不支持,则此参数将被忽略。

return yii\db\ColumnSchemaBuilder

可以进一步定制的列实例。

                public function float($precision = null)
{
    return $this->getDb()->getSchema()->createColumnSchemaBuilder(Schema::TYPE_FLOAT, $precision);
}

            
getBehavior() 公共方法

定义于: yii\base\Component::getBehavior()

返回命名行为对象。

public yii\base\Behavior|null getBehavior ( $name )
$name string

行为名称

return yii\base\Behavior|null

行为对象,如果行为不存在,则为 null

                public function getBehavior($name)
{
    $this->ensureBehaviors();
    return isset($this->_behaviors[$name]) ? $this->_behaviors[$name] : null;
}

            
getBehaviors() 公共方法

定义于: yii\base\Component::getBehaviors()

返回附加到此组件的所有行为。

public yii\base\Behavior[] getBehaviors ( )
return yii\base\Behavior[]

附加到此组件的行为列表

                public function getBehaviors()
{
    $this->ensureBehaviors();
    return $this->_behaviors;
}

            
getDb() 受保护方法 (自 2.0.6 版本起可用)

protected void getDb ( )

                protected function getDb()
{
    return $this->db;
}

            
hasEventHandlers() 公共方法

定义于: yii\base\Component::hasEventHandlers()

返回一个值,指示是否将任何处理程序附加到命名事件。

public boolean hasEventHandlers ( $name )
$name string

事件名称

return boolean

是否有任何处理程序附加到事件。

                public function hasEventHandlers($name)
{
    $this->ensureBehaviors();
    if (!empty($this->_events[$name])) {
        return true;
    }
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (!empty($handlers) && StringHelper::matchWildcard($wildcard, $name)) {
            return true;
        }
    }
    return Event::hasHandlers($this, $name);
}

            
hasMethod() 公共方法

定义于: yii\base\Component::hasMethod()

返回一个值,指示是否定义了方法。

如果方法被定义,则

  • 该类具有具有指定名称的方法
  • 附加的行为具有具有给定名称的方法(当 $checkBehaviors 为 true 时)。
public boolean hasMethod ( $name, $checkBehaviors true )
$name string

属性名称

$checkBehaviors boolean

是否将行为的方法视为此组件的方法

return boolean

该方法是否被定义

                public function hasMethod($name, $checkBehaviors = true)
{
    if (method_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->hasMethod($name)) {
                return true;
            }
        }
    }
    return false;
}

            
hasProperty() 公共方法

定义于: yii\base\Component::hasProperty()

返回一个值,指示是否为该组件定义了属性。

如果属性被定义,则

  • 该类具有与指定名称关联的 getter 或 setter 方法(在这种情况下,属性名称不区分大小写);
  • 类具有与指定名称相同的成员变量(当 $checkVars 为真时);
  • 附加的行为具有给定名称的属性(当 $checkBehaviors 为 true 时)。

另见

public boolean hasProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

属性名称

$checkVars boolean

是否将成员变量视为属性

$checkBehaviors boolean

是否将行为的属性视为此组件的属性

return boolean

该属性是否被定义

                public function hasProperty($name, $checkVars = true, $checkBehaviors = true)
{
    return $this->canGetProperty($name, $checkVars, $checkBehaviors) || $this->canSetProperty($name, false, $checkBehaviors);
}

            
init() 公共方法

初始化迁移。

此方法将 $db 设置为 'db' 应用程序组件,如果它为 null

public void init ( )

                public function init()
{
    parent::init();
    $this->db = Instance::ensure($this->db, Connection::className());
    $this->db->getSchema()->refresh();
    $this->db->enableSlaves = false;
}

            
insert() 公共方法

创建并执行 INSERT SQL 语句。

该方法将正确地转义列名,并将要插入的值绑定。

public void insert ( $table, $columns )
$table string

将插入新行的表。

$columns array

要插入到表的列数据(名称 => 值)。

                public function insert($table, $columns)
{
    $time = $this->beginCommand("insert into $table");
    $this->db->createCommand()->insert($table, $columns)->execute();
    $this->endCommand($time);
}

            
integer() 公共方法 (自 2.0.6 版本起可用)

定义于: yii\db\SchemaBuilderTrait::integer()

创建整数列。

public yii\db\ColumnSchemaBuilder integer ( $length null )
$length integer|null

列大小或精度定义。如果 DBMS 不支持,此参数将被忽略。

return yii\db\ColumnSchemaBuilder

可以进一步定制的列实例。

                public function integer($length = null)
{
    return $this->getDb()->getSchema()->createColumnSchemaBuilder(Schema::TYPE_INTEGER, $length);
}

            
json() 公共方法 (自 2.0.14 版本起可用)

定义于: yii\db\SchemaBuilderTrait::json()

创建 JSON 列。

public yii\db\ColumnSchemaBuilder json ( )
return yii\db\ColumnSchemaBuilder

可以进一步定制的列实例。

throws yii\base\Exception

                public function json()
{
    /*
     * TODO Remove in Yii 2.1
     *
     * Disabled due to bug in MySQL extension
     * @link https://bugs.php.net/bug.php?id=70384
     */
    if (version_compare(PHP_VERSION, '5.6', '<') && $this->getDb()->getDriverName() === 'mysql') {
        throw new \yii\base\Exception('JSON column type is not supported in PHP < 5.6');
    }
    return $this->getDb()->getSchema()->createColumnSchemaBuilder(Schema::TYPE_JSON);
}

            
money() 公共方法 (自 2.0.6 版本起可用)

定义于: yii\db\SchemaBuilderTrait::money()

创建货币列。

public yii\db\ColumnSchemaBuilder money ( $precision null, $scale null )
$precision integer|null

列值精度,通常是总的数字位数。传递给列类型的第一個参数,例如 DECIMAL(precision, scale)。如果 DBMS 不支持此参数,则它将被忽略。

$scale integer|null

列值比例,通常是小数点后的数字位数。传递给列类型的第二个参数,例如 DECIMAL(precision, scale)。如果 DBMS 不支持此参数,则它将被忽略。

return yii\db\ColumnSchemaBuilder

可以进一步定制的列实例。

                public function money($precision = null, $scale = null)
{
    $length = [];
    if ($precision !== null) {
        $length[] = $precision;
    }
    if ($scale !== null) {
        $length[] = $scale;
    }
    return $this->getDb()->getSchema()->createColumnSchemaBuilder(Schema::TYPE_MONEY, $length);
}

            
off() 公共方法

定义于: yii\base\Component::off()

从此组件中分离现有的事件处理程序。

此方法是 on() 的反面。

注意:如果为事件名称传递通配符模式,则只会删除使用此通配符注册的处理程序,而使用与该通配符匹配的纯名称注册的处理程序将保留。

另见 on().

public boolean off ( $name, $handler null )
$name string

事件名称

$handler callable|null

要删除的事件处理程序。如果它为 null,则将删除附加到命名事件的所有处理程序。

return boolean

如果找到并分离了处理程序

                public function off($name, $handler = null)
{
    $this->ensureBehaviors();
    if (empty($this->_events[$name]) && empty($this->_eventWildcards[$name])) {
        return false;
    }
    if ($handler === null) {
        unset($this->_events[$name], $this->_eventWildcards[$name]);
        return true;
    }
    $removed = false;
    // plain event names
    if (isset($this->_events[$name])) {
        foreach ($this->_events[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_events[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_events[$name] = array_values($this->_events[$name]);
            return true;
        }
    }
    // wildcard event names
    if (isset($this->_eventWildcards[$name])) {
        foreach ($this->_eventWildcards[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_eventWildcards[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_eventWildcards[$name] = array_values($this->_eventWildcards[$name]);
            // remove empty wildcards to save future redundant regex checks:
            if (empty($this->_eventWildcards[$name])) {
                unset($this->_eventWildcards[$name]);
            }
        }
    }
    return $removed;
}

            
on() 公共方法

定义于: yii\base\Component::on()

将事件处理程序附加到事件。

事件处理程序必须是有效的 PHP 回调。以下是一些示例

function ($event) { ... }         // anonymous function
[$object, 'handleClick']          // $object->handleClick()
['Page', 'handleClick']           // Page::handleClick()
'handleClick'                     // global function handleClick()

事件处理程序必须使用以下签名定义,

function ($event)

其中 $event 是一个 yii\base\Event 对象,其中包含与事件关联的参数。

自 2.0.14 起,您可以将事件名称指定为通配符模式

$component->on('event.group.*', function ($event) {
    Yii::trace($event->name . ' is triggered.');
});

另见 off().

public void on ( $name, $handler, $data null, $append true )
$name string

事件名称

$handler callable

事件处理程序

$data mixed

触发事件时要传递给事件处理程序的数据。当事件处理程序被调用时,可以通过 yii\base\Event::$data 访问此数据。

$append boolean

是否将新的事件处理程序附加到现有处理程序列表的末尾。如果为 false,则新的处理程序将插入到现有处理程序列表的开头。

                public function on($name, $handler, $data = null, $append = true)
{
    $this->ensureBehaviors();
    if (strpos($name, '*') !== false) {
        if ($append || empty($this->_eventWildcards[$name])) {
            $this->_eventWildcards[$name][] = [$handler, $data];
        } else {
            array_unshift($this->_eventWildcards[$name], [$handler, $data]);
        }
        return;
    }
    if ($append || empty($this->_events[$name])) {
        $this->_events[$name][] = [$handler, $data];
    } else {
        array_unshift($this->_events[$name], [$handler, $data]);
    }
}

            
primaryKey() 公共方法 (自版本 2.0.6 起可用)

定义于: yii\db\SchemaBuilderTrait::primaryKey()

创建主键列。

public yii\db\ColumnSchemaBuilder primaryKey ( $length null )
$length integer|null

列大小或精度定义。如果 DBMS 不支持,此参数将被忽略。

return yii\db\ColumnSchemaBuilder

可以进一步定制的列实例。

                public function primaryKey($length = null)
{
    return $this->getDb()->getSchema()->createColumnSchemaBuilder(Schema::TYPE_PK, $length);
}

            
renameColumn() 公共方法

构建并执行重命名列的 SQL 语句。

public void renameColumn ( $table, $name, $newName )
$table string

要重命名的列所在的表。该名称将由方法正确引用。

$name string

列的旧名称。该名称将由方法正确引用。

$newName string

列的新名称。该名称将由方法正确引用。

                public function renameColumn($table, $name, $newName)
{
    $time = $this->beginCommand("rename column $name in table $table to $newName");
    $this->db->createCommand()->renameColumn($table, $name, $newName)->execute();
    $this->endCommand($time);
}

            
renameTable() 公共方法

构建并执行重命名 DB 表的 SQL 语句。

public void renameTable ( $table, $newName )
$table string

要重命名的表。该名称将由方法正确引用。

$newName string

新的表名。该名称将由方法正确引用。

                public function renameTable($table, $newName)
{
    $time = $this->beginCommand("rename table $table to $newName");
    $this->db->createCommand()->renameTable($table, $newName)->execute();
    $this->endCommand($time);
}

            
safeDown() 公共方法

此方法包含在删除此迁移时要执行的逻辑。

此方法与 down() 不同,在于此处实现的 DB 逻辑将被包含在 DB 事务中。子类可以实现此方法而不是 down(),如果 DB 逻辑需要在事务中。

注意:并非所有 DBMS 都支持事务。并且某些 DB 查询无法放入事务中。有关一些示例,请参阅 隐式提交

public false|void|mixed safeDown ( )
return false|void|mixed

返回一个假值以指示迁移失败并且不应该继续执行。所有其他返回值都表示迁移成功。

                public function safeDown()
{
}

            
safeUp() 公共方法

此方法包含在应用此迁移时要执行的逻辑。

此方法与 up() 不同,在于此处实现的 DB 逻辑将被包含在 DB 事务中。子类可以实现此方法而不是 up(),如果 DB 逻辑需要在事务中。

注意:并非所有 DBMS 都支持事务。并且某些 DB 查询无法放入事务中。有关一些示例,请参阅 隐式提交

public false|void|mixed safeUp ( )
return false|void|mixed

返回一个假值以指示迁移失败并且不应该继续执行。所有其他返回值都表示迁移成功。

                public function safeUp()
{
}

            
smallInteger() 公共方法 (自版本 2.0.6 起可用)

定义于: yii\db\SchemaBuilderTrait::smallInteger()

创建 smallint 列。

public yii\db\ColumnSchemaBuilder smallInteger ( $length null )
$length integer|null

列大小或精度定义。如果 DBMS 不支持,此参数将被忽略。

return yii\db\ColumnSchemaBuilder

可以进一步定制的列实例。

                public function smallInteger($length = null)
{
    return $this->getDb()->getSchema()->createColumnSchemaBuilder(Schema::TYPE_SMALLINT, $length);
}

            
string() 公共方法 (自版本 2.0.6 起可用)

定义于: yii\db\SchemaBuilderTrait::string()

创建字符串列。

public yii\db\ColumnSchemaBuilder string ( $length null )
$length integer|null

列大小定义,即最大字符串长度。如果 DBMS 不支持,此参数将被忽略。

return yii\db\ColumnSchemaBuilder

可以进一步定制的列实例。

                public function string($length = null)
{
    return $this->getDb()->getSchema()->createColumnSchemaBuilder(Schema::TYPE_STRING, $length);
}

            
text() 公共方法 (自版本 2.0.6 起可用)

定义于: yii\db\SchemaBuilderTrait::text()

创建文本列。

public yii\db\ColumnSchemaBuilder text ( )
return yii\db\ColumnSchemaBuilder

可以进一步定制的列实例。

                public function text()
{
    return $this->getDb()->getSchema()->createColumnSchemaBuilder(Schema::TYPE_TEXT);
}

            
time() 公共方法 (自版本 2.0.6 起可用)

定义于: yii\db\SchemaBuilderTrait::time()

创建时间列。

public yii\db\ColumnSchemaBuilder time ( $precision null )
$precision integer|null

列值精度。传递给列类型的第一参数,例如 TIME(precision)。如果 DBMS 不支持,此参数将被忽略。

return yii\db\ColumnSchemaBuilder

可以进一步定制的列实例。

                public function time($precision = null)
{
    return $this->getDb()->getSchema()->createColumnSchemaBuilder(Schema::TYPE_TIME, $precision);
}

            
timestamp() 公共方法 (自版本 2.0.6 起可用)

定义于: yii\db\SchemaBuilderTrait::timestamp()

创建时间戳列。

public yii\db\ColumnSchemaBuilder timestamp ( $precision null )
$precision integer|null

列值精度。传递给列类型的第一参数,例如 TIMESTAMP(precision)。如果 DBMS 不支持,此参数将被忽略。

return yii\db\ColumnSchemaBuilder

可以进一步定制的列实例。

                public function timestamp($precision = null)
{
    return $this->getDb()->getSchema()->createColumnSchemaBuilder(Schema::TYPE_TIMESTAMP, $precision);
}

            
tinyInteger() 公共方法 (自版本 2.0.14 起可用)

定义于: yii\db\SchemaBuilderTrait::tinyInteger()

创建 tinyint 列。如果 DBMS 不支持 tinyint,则将使用 smallint。

public yii\db\ColumnSchemaBuilder tinyInteger ( $length null )
$length integer|null

列大小或精度定义。如果 DBMS 不支持,此参数将被忽略。

return yii\db\ColumnSchemaBuilder

可以进一步定制的列实例。

                public function tinyInteger($length = null)
{
    return $this->getDb()->getSchema()->createColumnSchemaBuilder(Schema::TYPE_TINYINT, $length);
}

            
trigger() 公共方法

定义于: yii\base\Component::trigger()

触发事件。

此方法表示事件的发生。它调用事件的所有附加处理程序,包括类级别的处理程序。

public void trigger ( $name, yii\base\Event $event null )
$name string

事件名称

$event yii\base\Event|null

事件实例。 如果未设置,将创建默认的 yii\base\Event 对象。

                public function trigger($name, Event $event = null)
{
    $this->ensureBehaviors();
    $eventHandlers = [];
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (StringHelper::matchWildcard($wildcard, $name)) {
            $eventHandlers[] = $handlers;
        }
    }
    if (!empty($this->_events[$name])) {
        $eventHandlers[] = $this->_events[$name];
    }
    if (!empty($eventHandlers)) {
        $eventHandlers = call_user_func_array('array_merge', $eventHandlers);
        if ($event === null) {
            $event = new Event();
        }
        if ($event->sender === null) {
            $event->sender = $this;
        }
        $event->handled = false;
        $event->name = $name;
        foreach ($eventHandlers as $handler) {
            $event->data = $handler[1];
            call_user_func($handler[0], $event);
            // stop further handling if the event is handled
            if ($event->handled) {
                return;
            }
        }
    }
    // invoke class-level attached handlers
    Event::trigger($this, $name, $event);
}

            
truncateTable() 公共方法

构建并执行用于截断 DB 表的 SQL 语句。

public void truncateTable ( $table )
$table string

要截断的表。 该名称将由方法正确引用。

                public function truncateTable($table)
{
    $time = $this->beginCommand("truncate table $table");
    $this->db->createCommand()->truncateTable($table)->execute();
    $this->endCommand($time);
}

            
up() 公共方法

此方法包含在应用此迁移时要执行的逻辑。

子类可以覆盖此方法以提供实际的迁移逻辑。

public false|void|mixed up ( )
return false|void|mixed

返回一个假值以指示迁移失败并且不应该继续执行。所有其他返回值都表示迁移成功。

                public function up()
{
    $transaction = $this->db->beginTransaction();
    try {
        if ($this->safeUp() === false) {
            $transaction->rollBack();
            return false;
        }
        $transaction->commit();
    } catch (\Exception $e) {
        $this->printException($e);
        $transaction->rollBack();
        return false;
    } catch (\Throwable $e) {
        $this->printException($e);
        $transaction->rollBack();
        return false;
    }
    return null;
}

            
update() 公共方法

创建并执行 UPDATE SQL 语句。

该方法将正确转义列名并将要更新的值绑定。

public void update ( $table, $columns, $condition '', $params = [] )
$table string

要更新的表。

$columns array

要更新的列数据(名称 => 值)。

$condition array|string

将放在 WHERE 部分中的条件。请参考 yii\db\Query::where() 了解如何指定条件。

$params array

要绑定到查询的参数。

                public function update($table, $columns, $condition = '', $params = [])
{
    $time = $this->beginCommand("update $table");
    $this->db->createCommand()->update($table, $columns, $condition, $params)->execute();
    $this->endCommand($time);
}

            
upsert() 公共方法 (自版本 2.0.14 起可用)

创建并执行命令,如果数据库表中不存在行(匹配唯一约束),则将其插入,否则更新它们。

该方法将正确地转义列名,并将要插入的值绑定。

public void upsert ( $table, $insertColumns, $updateColumns true, $params = [] )
$table string

将向其中插入/更新新行的表。

$insertColumns array|yii\db\Query

要插入到表中的列数据(名称 => 值)或 yii\db\Query 的实例,以执行 INSERT INTO ... SELECT SQL 语句。

$updateColumns array|boolean

如果列数据已存在,要更新的列数据(名称 => 值)。 如果传递 true,则列数据将更新以匹配插入列数据。 如果传递 false,则如果列数据已存在,将不会执行更新。

$params array

要绑定到命令的参数。

                public function upsert($table, $insertColumns, $updateColumns = true, $params = [])
{
    $time = $this->beginCommand("upsert into $table");
    $this->db->createCommand()->upsert($table, $insertColumns, $updateColumns, $params)->execute();
    $this->endCommand($time);
}