web-dev-qa-db-fra.com

Comment effectuer une migration d'énumération de champ yii2

Je fais le champ ENUM et le résultat est une erreur lorsque j'utilise yii migrate/up sur les fenêtres 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

15
CrashBurn

Il n'y a pas de méthode enum () pour le moment car toutes les bases de données ne prennent pas en charge les champs ENUM. Vous pouvez cependant le faire manuellement:

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

Remarque: Cette solution est uniquement pour Mysql

Pour le contenu Postgresql associé, visitez ici

34
Bizley

En fait, la meilleure façon de travailler et de garder vos migrations propres serait d'utiliser un outil/assistant comme celui fourni par l'équipe yii2mod https://github.com/yii2mod/yii2-enum

de cette façon, vous pouvez construire la fonctionnalité d'énumération sur le code, fonctionne comme un charme.

c'est-à-dire une énumération pour 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',
    ];
}

Utilisez les méthodes suivantes pour accéder à votre Enum:

  • createByName () - Crée une nouvelle instance de type en utilisant le nom d'une valeur.
  • getValueByName () - Retourne la clé constante par valeur (étiquette)
  • createByValue () - Crée une nouvelle instance de type en utilisant la valeur.
  • listData () - Retourne le tableau associatif avec des constantes et des étiquettes
  • getLabel () - Retourne l'étiquette constante par clé
  • getConstantsByName () - Retourne la liste des constantes (par nom) pour ce type.
  • getConstantsByValue () - Retourne la liste des constantes (par valeur) pour ce type.
  • isValidName () - Vérifie si un nom est valide pour ce type. isValidValue () - Vérifie si une valeur est valide pour ce type.
1
Pablo Palacios