フィールドENUMを作成し、CMDウィンドウで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);
}
すべてのDBがENUMフィールドをサポートしているわけではないため、現時点ではenum()メソッドはありません。あなたはそれを手動で行うことができます:
'social_media' => "ENUM('facebook', 'google', 'Twitter', 'github')",
注:このソリューションはMysql専用です
関連するPostgresqlコンテンツについては ここ をご覧ください
実際にこれを実行して移行をクリーンに保つ最良の方法は、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',
];
}
Enumにアクセスするには、次のメソッドを使用します。