2010-11-06 5 views
2


J'utilise Zend Framework dans mon application. Et je veux savoir comment obtenir des valeurs du champ ENUM dans le tableau MySQL.
Par exemple: j'ai le champ permissions (ENUM ('delete_admin', 'edit_admin')). Comment obtenir array ('delete_admin', 'edit_admin') de la meilleure manière?
Merci d'avance.Zend Mysql obtenir des valeurs ENUM

Répondre

2

Voici comment je l'ai fait:

dans votre modèle mis ce

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

puis utilisez ceci:

$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; 
1

Ajouter dans votre classe 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]); 
3

Je l'ai fait de la manière suivante:

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

Voici comment vous pouvez obtenir un prêt d'exploser chaîne de MySQL:

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

Vous avez juste besoin de faire un explode(',' $result) sur elle pour obtenir un tableau avec vos valeurs ENUM. N'oubliez pas que vous avez besoin d'un accès en lecture à information_schema-database pour ce faire. Ajoutez une méthode à votre classe étendue Zend_Db_Table_Abstract

0

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

Une méthode pour votre mappeur de modèle d'application. En supposant que your_field_name est le nom de la colonne de la base de données dont vous avez besoin pour répertorier les valeurs ENUM de.

La méthode renvoie un tableau avec les valeurs ENUM de la colonne your_field_name.

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