1、在 Yii 2.0 中执行数据库迁移:MySQL 的 MEDIUMTEXT 类型。四个 TEXT 类型是 TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT。仅支持:TEXT
// 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 的支持
<?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
<?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
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.
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/250503.html
