如何进行字段枚举迁移 yii2
How to make field enum migration yii2
我创建字段 ENUM,当我在 CMD windows.
上使用 yii migrate/up
时结果出错
public function up()
{
$tableOptions = null;
if ($this->db->driverName === 'mysql') {
$tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB';
}
$this->createTable('{{%user_social_media}}', [
'social_media' => $this->ENUM('facebook', 'google', 'twitter', 'github'),
'id' => $this->primaryKey(),
'username' => $this->string(),
'user_id' => $this->integer(11),
'created_at' => $this->integer(11),
'updated_at' => $this->integer(11),
], $tableOptions);
}
目前没有 enum() 方法,因为不是每个数据库都支持 ENUM 字段。不过您可以手动完成:
'social_media' => "ENUM('facebook', 'google', 'twitter', 'github')",
注意:
此解决方案仅适用于 Mysql
有关 Postgresql 的内容请访问 here
实际上,实现这一点并保持迁移干净的最佳方法是使用一些 tool/helper,例如 yii2mod 团队 https://github.com/yii2mod/yii2-enum
提供的方法
通过这种方式,您可以在代码上构建枚举功能,效果非常好。
即genderType
的枚举
<?php
namespace common\models\enums;
use yii2mod\enum\helpers\BaseEnum;
/**
* Class GenderType
*
* @package yii2mod\settings\models\enumerables
*/
class GenderType extends BaseEnum
{
// add as many genders as you need
const MALE_TYPE = 'MALE';
const FEMALE_TYPE = 'FEMALE';
public static $list = [
self::MALE_TYPE => 'Male',
self::FEMALE_TYPE => 'Female',
];
}
使用以下方法访问您的枚举:
- createByName() - 使用一个名称创建一个新的类型实例
价值。
- getValueByName() - Returns 常量键值(标签)
- createByValue() - 使用值创建一个新的类型实例。
- listData() - Returns 具有常量值和
标签
- getLabel()- Returns按键常量标签
- getConstantsByName() - Returns 的常量列表(按名称)
这种类型。
- getConstantsByValue() - Returns 常量列表(通过
值)为这种类型。
- isValidName() - 检查名称是否有效
这种类型。 isValidValue() - 检查值是否对此类型有效。
我创建字段 ENUM,当我在 CMD windows.
上使用yii migrate/up
时结果出错
public function up()
{
$tableOptions = null;
if ($this->db->driverName === 'mysql') {
$tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB';
}
$this->createTable('{{%user_social_media}}', [
'social_media' => $this->ENUM('facebook', 'google', 'twitter', 'github'),
'id' => $this->primaryKey(),
'username' => $this->string(),
'user_id' => $this->integer(11),
'created_at' => $this->integer(11),
'updated_at' => $this->integer(11),
], $tableOptions);
}
目前没有 enum() 方法,因为不是每个数据库都支持 ENUM 字段。不过您可以手动完成:
'social_media' => "ENUM('facebook', 'google', 'twitter', 'github')",
注意: 此解决方案仅适用于 Mysql
有关 Postgresql 的内容请访问 here
实际上,实现这一点并保持迁移干净的最佳方法是使用一些 tool/helper,例如 yii2mod 团队 https://github.com/yii2mod/yii2-enum
提供的方法通过这种方式,您可以在代码上构建枚举功能,效果非常好。
即genderType
的枚举<?php
namespace common\models\enums;
use yii2mod\enum\helpers\BaseEnum;
/**
* Class GenderType
*
* @package yii2mod\settings\models\enumerables
*/
class GenderType extends BaseEnum
{
// add as many genders as you need
const MALE_TYPE = 'MALE';
const FEMALE_TYPE = 'FEMALE';
public static $list = [
self::MALE_TYPE => 'Male',
self::FEMALE_TYPE => 'Female',
];
}
使用以下方法访问您的枚举:
- createByName() - 使用一个名称创建一个新的类型实例 价值。
- getValueByName() - Returns 常量键值(标签)
- createByValue() - 使用值创建一个新的类型实例。
- listData() - Returns 具有常量值和 标签
- getLabel()- Returns按键常量标签
- getConstantsByName() - Returns 的常量列表(按名称) 这种类型。
- getConstantsByValue() - Returns 常量列表(通过 值)为这种类型。
- isValidName() - 检查名称是否有效 这种类型。 isValidValue() - 检查值是否对此类型有效。