Как сделать миграцию перечисления полей yii2
Я создаю поле ENUM, и результатом является ошибка, когда я использую yii migrate/up
в окнах CMD.
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]()
Ответы
Ответ 1
В настоящее время нет метода enum(), поскольку не каждая БД поддерживает поля ENUM. Вы можете сделать это вручную, хотя:
'social_media' => "ENUM('facebook', 'google', 'twitter', 'github')",
Примечание:
Это решение только для Mysql
Для соответствующего содержания Postgresql посетите здесь
Ответ 2
На самом деле лучший способ сделать это и сохранить чистоту миграций - использовать какой-нибудь инструмент/помощник, подобный тому, который предоставлен командой yii2mod https://github.com/yii2mod/yii2-enum
таким образом, вы можете построить функциональность 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',
];
}
Используйте следующие методы для доступа к своему Enum:
- createByName() - создает новый экземпляр типа, используя имя
стоимость.
- getValueByName() - возвращает постоянный ключ по значению (метке)
- createByValue() - создает новый экземпляр типа, используя значение.
- listData() - возвращает ассоциативный массив со значениями констант и
этикетки
- getLabel() - возвращает метку константы по ключу
- getConstantsByName() - возвращает список констант (по имени) для
этот тип.
- getConstantsByValue() - возвращает список констант (по
значение) для этого типа.
- isValidName() - Проверяет, является ли имя действительным для
этот тип. isValidValue() - Проверяет, является ли значение допустимым для этого типа.