Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php phalcon获取枚举值_Php_Mysql_Phalcon - Fatal编程技术网

Php phalcon获取枚举值

Php phalcon获取枚举值,php,mysql,phalcon,Php,Mysql,Phalcon,我使用的数据库中有很多列是“enum”和“set”类型的。我的目的是在Phalcon控制器中获取列的值。我发现了一些片段,但在Phalcon中什么都没有,当我试图执行它们时,似乎Phalcon有一些问题 public function getEnumValues(){ $sql = "SHOW COLUMNS FROM profiles LIKE 'eyes_color'"; $query = new \Phalcon\Mvc\Model\Query($sql, $this-

我使用的数据库中有很多列是“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;
}
返回:

语法错误,意外的令牌标识符(SHOW),在分析时靠近“来自配置文件的列(如“eyes\u color”):显示来自配置文件(如“eyes\u 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;
}
返回:

无法加载模型“列”


如果您有任何帮助,我将不胜感激。

您能从模型中的columnMap函数中得到您想要的吗

$model = new Profile();
$columns = $model->columnMap();
这将返回所有列的数组。是否可以创建另一个类似的函数来返回所需的列?也许你想要实现的是更多的参与


顺便说一句,我在使用modelManager时遇到了相同的错误。

这是一个适合您需要的工作版本:

$config=$this->getDI()->get('config');
$pdo=new\Phalcon\Db\Adapter\pdo\Mysql([
“主机”=>$config->数据库->主机,
“用户名”=>$config->数据库->用户名,
“密码”=>$config->数据库->密码,
“dbname”=>$config->database->dbname,
]);
$sql=”
从子字符串(列类型,6))中选择TRIM(尾部“')作为枚举列表
从信息_schema.COLUMNS
其中表\u SCHEMA='my\u db\u name'
和TABLE_NAME='my_TABLE_NAME'
和COLUMN\u NAME='my\u COLUMN\u NAME'
";
$result=$pdo->query($sql)->fetch();
$enumArray=array();
如果(!empty($result['enum_list'])){
$enumArray=分解(“,”,$result['enum_list']);
foreach($enumArray as&$value){
$value=修剪($value,“”);
}
}
回声“;变量转储($enumArray);死亡

是的,这是可能的,但不能解决问题。关键是要动态获取枚举值,所以我在哪里做并不重要。问题是怎么做。
$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;