【问题标题】:phalcon get enum valuesphalcon 获取枚举值
【发布时间】:2015-04-08 12:40:58
【问题描述】:

我正在使用包含大量“枚举”和“设置”类型的列的数据库。我的意思是在 Phalcon 控制器中获取列的值。我找到了一些 sn-ps,但在 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 'eyes_color'',解析时:SHOW COLUMNS FROM profiles LIKE 'eyes_color'

方法二:

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”

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

【问题讨论】:

    标签: php mysql phalcon


    【解决方案1】:

    这是满足您需求的工作版本:

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

    【讨论】:

      【解决方案2】:

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

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

      这将返回一个包含所有列的数组。可以创建另一个类似的函数来只返回你想要的列吗?也许你想要达到的目标更多。

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

      【讨论】:

      • 是的,这是可能的,但它不能解决问题。关键是动态获取枚举值,所以我将在哪里做这件事并不重要。问题是怎么做。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-03
      • 2022-11-12
      • 2013-04-07
      • 2012-08-11
      相关资源
      最近更新 更多