我正在使用带有'enum'和'set'类型的很多列的数据库。我的观点是在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;
}
返回:
语法错误,意外令牌IDENTIFIER(SHOW),靠近'COLUMNS FROM profiles LIKE'peyes_color'',解析时:SHOW COLUMNS FROM profiles LIKE'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;
}
返回:
无法加载模型'COLUMNS'
如果有任何帮助,我将不胜感激。
答案 0 :(得分:3)
这是适合您需求的工作版本:
$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;
答案 1 :(得分:0)
你能从模型中的columnMap函数得到你想要的东西吗?
$model = new Profile();
$columns = $model->columnMap();
这将返回所有列的数组。可能创建另一个类似的函数只返回你想要的列?也许你正在努力实现的目标更多。
BTW我使用modelManager得到了同样的错误。