如何进行字段枚举迁移yii2

时间:2016-08-23 16:53:32

标签: yii enums yii2 migration data-migration

当我在CMD窗口上使用yii migrate/up时,我创建字段ENUM并且结果是错误的。

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);
}

When I migrate/up error

2 个答案:

答案 0 :(得分:34)

目前没有enum()方法,因为并非每个DB都支持ENUM字段。你可以手动完成:

'social_media' => "ENUM('facebook', 'google', 'twitter', 'github')",

注意: 此解决方案仅适用于Mysql

对于相关的Postgresql内容,请访问here

答案 1 :(得分:1)

实际上,最好的方法是使用yii2mod团队https://github.com/yii2mod/yii2-enum

所提供的工具/帮助程序来保持这一工作并保持迁移的整洁。

通过这种方式,您可以在代码上构建枚举功能,就像是一种魅力。

即性别的枚举

<?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()-按值(标签)返回常量键
  • createByValue()-使用该值创建一个新的类型实例。
  • listData()-返回具有常量值和 标签
  • getLabel()-通过键返回常量标签
  • getConstantsByName()-返回常量的列表(按名称) 这种类型。
  • getConstantsByValue()-返回常量列表(按 值)。
  • isValidName()-检查名称是否有效 这种类型。 isValidValue()-检查此类型的值是否有效。