2015-04-08 104 views
2

我正在與許多與'枚舉'和'設置'類型列的數據庫。我的觀點是在Phalcon控制器中獲取列的值。我發現了一些片段,但沒有在Phalcon中,當我試圖執行它們時,似乎Phalcon有一些問題。phalcon獲取枚舉值

public function getEnumValues(){ 
    $sql = "SHOW COLUMNS FROM profiles LIKE 'eyes_color'"; 

    $query = new \Phalcon\Mvc\Model\Query($sql, $this->getDI()); 
    $result = $query->execute(); 

    return $result; 
} 

返回:

語法錯誤,意外的標記標識符(SHOW),近到 'COLUMNS FROM狀輪廓「eyes_color',在解析時:SHOW COLUMNS FROM狀輪廓 'eyes_color'

方法2:

public function getEnumValues(){ 
    $sql = "SELECT COLUMN_TYPE FROM COLUMNS WHERE TABLE_NAME = 'profiles' AND COLUMN_NAME = 'hair_color'"; 

    $query = new \Phalcon\Mvc\Model\Query($sql, $this->getDI()); 
    $result = $query->execute(); 

    return $result; 
} 

返回:

型號「列」無法加載

我會感謝任何幫助。

回答

0

你能從模型中的columnMap函數中得到你想要的嗎?

$model = new Profile(); 
$columns = $model->columnMap(); 

這將返回所有列的數組。可能創建另一個類似的函數來返回你想要的列?也許你想要實現的是更多的參與。

順便說一句我用modelManager得到了同樣的錯誤。

+0

是的,它是可能的,但它並沒有解決問題。關鍵是要動態獲取枚舉值,所以我將在哪裏做到這一點並不重要。問題是如何去做。 – Rocket

2

這是您的需求工作版本:

$config = $this->getDI()->get('config'); 
$pdo = new \Phalcon\Db\Adapter\Pdo\Mysql([ 
    "host"  => $config->database->host, 
    "username" => $config->database->username, 
    "password" => $config->database->password, 
    "dbname" => $config->database->dbname, 
]); 
$sql = " 
    SELECT TRIM(TRAILING ')' FROM SUBSTRING(COLUMN_TYPE,6)) AS enum_list 
    FROM information_schema.COLUMNS 
    WHERE TABLE_SCHEMA='my_db_name' 
     AND TABLE_NAME='my_table_name' 
     AND COLUMN_NAME='my_column_name' 
"; 
$result = $pdo->query($sql)->fetch(); 
$enumArray = array(); 
if (!empty($result['enum_list'])) { 
    $enumArray = explode(',', $result['enum_list']); 
    foreach ($enumArray as &$value) { 
     $value = trim($value, "'"); 
    } 
} 
echo "<pre>"; var_dump($enumArray); die;