代码之家  ›  专栏  ›  技术社区  ›  Alex Pliutau

Zend Mysql get枚举值

  •  2
  • Alex Pliutau  · 技术社区  · 14 年前


    我用 Zend Framework 在我的申请中。我想知道如何从 MySQL 桌子。
    例如:我有 permissions 字段( ENUM (“删除管理员”、“编辑管理员”)。如何以最佳方式获取数组('删除管理员','编辑管理员')?
    提前谢谢你。

    6 回复  |  直到 14 年前
        1
  •  2
  •   max4ever    14 年前

    我就是这样做的:

    把这个放在你的模型里

    function getInfoTabella()
        {
            $data = $this->info(self::METADATA);
            return $data;
        }
    

    $model = new $model_name();
            $description = $model->getInfoTabella();
            $enum = $description[$FIELD_NAME]['DATA_TYPE'];
    
            $inizia_enum = strpos($enum, "'");
            $finisce_enum = strrpos($enum, "'");
            if ($inizia_enum === false || $finisce_enum  === false)
                throw new Exception('errore enum database');
    
            $finisce_enum -= $inizia_enum ;
    
    
            $enum = substr($enum, $inizia_enum, $finisce_enum+1);
            str_replace("'", '', $enum);
            $enum = explode("," , $enum);
    return $enum;
    
        2
  •  3
  •   Dmytro Zavalkin    14 年前

    我是用下一种方式做的:

    $metadata = $this->info(self::METADATA);
    $typesString = $metadata['enum_column_name']['DATA_TYPE'];
    preg_match("=\((.*)\)=is", $typesString, $parts);
    $enumColumnValues = explode("','", trim($parts[1], "'"));
    
        3
  •  2
  •   breiti    13 年前

    SELECT REPLACE(TRIM(TRAILING ')' FROM (TRIM(LEADING 'enum(' FROM c.COLUMN_TYPE))), '\'', '')
    FROM information_schema.`COLUMNS` c
    WHERE c.COLUMN_NAME = 'enum_col'
    

    你只需要做一个 explode(',' $result)

    请记住,要执行此操作,您需要对信息架构数据库的读取访问权限。

        4
  •  1
  •   thomaux    13 年前

    将此添加到Zend_Table类中:

    $adapter = $this->getDefaultAdapter();
    $sql     = 'SHOW COLUMNS FROM `table` LIKE `field`';
    $result  = $adapter->fetchRow($sql);
    
    preg_match('=\((.*)\)=is' $options);
    str_replace("'", '' $options[1]);
    $options = explode(',', $options[1]);
    
        5
  •  0
  •   Richard Ayotte    11 年前

    向Zend Db_Table_抽象扩展类添加方法。

    public function getEnumValues($field) {
      $metadata = $this->info(self::METADATA);
      preg_match_all('/\'(?<item>.+?)\'/', $metadata[$field]['DATA_TYPE'], $matches);
      return $matches['item'];
    }
    
        6
  •  0
  •   Vlado    9 年前

    应用程序模型映射器的方法。假设您的字段名是需要列出枚举值的数据库列的名称。

    该方法返回一个数组,其中包含“字段名”列的枚举值。

    public function getAvailableEnumTypes() {
        $this->your_model_name = new Application_Model_DbTable_YourModelName(); // DB table
        $info = $this->your_model_name->info();
        $dat = explode("','", preg_replace("/(enum\('|'\))/", "", $info['metadata']['your_field_name']['DATA_TYPE']));
        return $dat;
    }