在 Yii 2.0 中执行数据库迁移:添加 MySQL 字段的 MEDIUMTEXT 类型
1、在 Yii 2.0 中执行数据库迁移:MySQL 的 MEDIUMTEXT 类型。四个 TEXT 类型是 TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT。仅支持:TEXT
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | // The following are the supported abstract column data types. const TYPE_PK = 'pk' ; const TYPE_UPK = 'upk' ; const TYPE_BIGPK = 'bigpk' ; const TYPE_UBIGPK = 'ubigpk' ; const TYPE_CHAR = 'char' ; const TYPE_STRING = 'string' ; const TYPE_TEXT = 'text' ; const TYPE_TINYINT = 'tinyint' ; const TYPE_SMALLINT = 'smallint' ; const TYPE_INTEGER = 'integer' ; const TYPE_BIGINT = 'bigint' ; const TYPE_FLOAT = 'float' ; const TYPE_DOUBLE = 'double' ; const TYPE_DECIMAL = 'decimal' ; const TYPE_DATETIME = 'datetime' ; const TYPE_TIMESTAMP = 'timestamp' ; const TYPE_TIME = 'time' ; const TYPE_DATE = 'date' ; const TYPE_BINARY = 'binary' ; const TYPE_BOOLEAN = 'boolean' ; const TYPE_MONEY = 'money' ; const TYPE_JSON = 'json' ; |
2、参考文件:\vendor\yiisoft\yii2\db\SchemaBuilderTrait.php,复制至 \console\db\mysql\SchemaBuilderTrait.php,参考 TEXT 类型的实现,添加对 TINYTEXT、MEDIUMTEXT、LONGTEXT 的支持
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | <?php /** * @link http://www.yiiframework.com/ * @copyright Copyright (c) 2008 Yii Software LLC * @license http://www.yiiframework.com/license/ */ namespace console\db\mysql; use yii\base\NotSupportedException; use yii\db\Connection; use yii\db\ColumnSchemaBuilder; /** * SchemaBuilderTrait contains shortcut methods to create instances of [[ColumnSchemaBuilder]]. * * These can be used in database migrations to define database schema types using a PHP interface. * This is useful to define a schema in a DBMS independent way so that the application may run on * different DBMS the same way. * * For example you may use the following code inside your migration files: * * ```php * $this->createTable('example_table', [ * 'id' => $this->primaryKey(), * 'name' => $this->string(64)->notNull(), * 'type' => $this->integer()->notNull()->defaultValue(10), * 'description' => $this->text(), * 'rule_name' => $this->string(64), * 'data' => $this->text(), * 'created_at' => $this->datetime()->notNull(), * 'updated_at' => $this->datetime(), * ]); * ``` * * @author Qiang Wang <shuijingwanwq@163.com> * @since 1.0 */ trait SchemaBuilderTrait { /** * @return Connection the database connection to be used for schema building. */ abstract protected function getDb(); /** * Creates a tinytext column. * @return ColumnSchemaBuilder the column instance which can be further customized. * @throws NotSupportedException if there is no support for the current driver type * @since 2.0.6 */ public function tinyText() { return $this ->getDb()->getSchema()->createColumnSchemaBuilder( 'tinytext' ); } /** * Creates a mediumtext column. * @return ColumnSchemaBuilder the column instance which can be further customized. * @throws NotSupportedException if there is no support for the current driver type * @since 2.0.6 */ public function mediumText() { return $this ->getDb()->getSchema()->createColumnSchemaBuilder( 'mediumtext' ); } /** * Creates a longtext column. * @return ColumnSchemaBuilder the column instance which can be further customized. * @throws NotSupportedException if there is no support for the current driver type * @since 2.0.6 */ public function longText() { return $this ->getDb()->getSchema()->createColumnSchemaBuilder( 'longtext' ); } } |
3、在数据库迁移文件中,引用新建的 Trait,以添加字段类型:MEDIUMTEXT
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | <?php use yii\base\NotSupportedException; use yii\db\Migration; use console\db\mysql\SchemaBuilderTrait; /** * Class m200102_030708_pre_pub_log */ class m200102_030708_pre_pub_log extends Migration { use SchemaBuilderTrait; /** * {@inheritdoc} * @throws NotSupportedException if there is no support for the current driver type */ public function safeUp() { $tableOptions = null; if ( $this ->db->driverName === 'mysql' ) { $tableOptions = 'CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE=InnoDB COMMENT="预发布日志"' ; } $this ->createTable( '{{%pre_pub_log}}' , [ 'id' => $this ->primaryKey(), 'pub_log_message' => $this ->mediumText()->notNull()->comment( '发布日志说明' ), ], $tableOptions ); } /** * {@inheritdoc} */ public function safeDown() { echo "m200102_030708_pre_pub_log cannot be reverted.\n" ; return false; } /* // Use up()/down() to run migration code without a transaction. public function up() { } public function down() { echo "m200102_030708_pre_pub_log cannot be reverted.\n"; return false; } */ } |
4、执行数据库迁移,生成表:预发布日志,查看字段:pub_log_message,其类型为:mediumtext,符合预期,如图1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | PS E:\wwwroot\channel-pub-api-feature-success-error-tasks> ./yii migrate Yii Migration Tool (based on Yii v2.0.30) Total 1 new migration to be applied: m200102_030708_pre_pub_log Apply the above migration? (yes|no) [no]:yes *** applying m200102_030708_pre_pub_log > create table {{%pre_pub_log}} ... done (time: 0.280s) *** applied m200102_030708_pre_pub_log (time: 0.394s) 1 migration was applied. Migrated up successfully. |
近期评论