Intereting Posts

Zend Mysql получает значения ENUM

Я использую Zend Framework в своем приложении. И я хочу знать, как получить значения из поля ENUM в таблице MySQL .
Например: у меня есть поле permissions ( ENUM ('delete_admin', 'edit_admin')). Как получить массив ('delete_admin', 'edit_admin') наилучшим образом?
Заранее спасибо.

Solutions Collecting From Web of "Zend Mysql получает значения ENUM"

Вот как я это сделал:

в вашей модели положите это

 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; 

Я сделал это следующим образом:

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

Вот как вы можете получить строку, готовую к взрыву, из MySQL:

 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) на нем, чтобы получить массив с вашими значениями enum.

Помните, что для этого вам нужен доступ для чтения к базе данных information_schema.

Добавьте это в свой класс 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]); 

Добавьте метод в расширенный класс Zend_Db_Table_Abstract.

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

Метод для вашей модели модели приложения. Предполагая, что your_field_name – это имя столбца базы данных, для которого необходимо указать значения ENUM.

Метод возвращает массив с значениями ENUM столбца 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; }