【问题标题】:Doctrine column names case sensitivity原则列名称区分大小写
【发布时间】:2019-05-17 16:40:53
【问题描述】:

我正在尝试使用 Doctrine 查询 mssql 数据库。我建立连接,从数据库构建模式并构建类。一切都很顺利,但现在当我尝试查询数据库时:

symfony doctrine:dql "from TABLE_NAME"

我收到一个错误 Invalid column name 'column_name',因为我们的 mssql 数据库服务器设置为使用 CASE SENSITIVE 和 UPPER CASE 列名,而教义强制我的所有列名都是小写。如何设置原则以保持敏感性(更好)或使它们大写?

【问题讨论】:

    标签: sql-server doctrine pdo


    【解决方案1】:

    看链接

    http://www.doctrine-project.org/projects/orm/1.2/docs/manual/configuration/en

    $conn->setAttribute(Doctrine_Core::ATTR_PORTABILITY,
            Doctrine_Core::PORTABILITY_FIX_CASE )
    

    【讨论】:

    • 如手册所述“大小写取决于 field_case 选项,该选项可设置为 CASE_LOWER(默认)或 CASE_UPPER”。我在哪里设置 field_case 选项?
    • $conn->setAttribute(Doctrine_Core::ATTR_FIELD_CASE, CASE_UPPER);
    • 这对我没有帮助。我已经彻底检查了所有内容,但列名仍然是小写的。你试过这个吗?有没有其他方法可以解决问题?也许设置一个钩子,当查询构建并手动执行 strtoupper 时?
    • 代码在 IMPORT/MSSQL.PHP LINE 210, if ($this->conn->getAttribute(Doctrine_Core::ATTR_PORTABILITY) & Doctrine_Core::PORTABILITY_FIX_CASE) { if ($this->conn ->getAttribute(Doctrine_Core::ATTR_FIELD_CASE) == CASE_LOWER) { $keyName = strtolower($keyName); $pkName = strtolower($pkName); } 其他 { $keyName = strtoupper($keyName); $pkName = strtoupper($pkName); } }
    • 也可以试试 $conn->setAttribute(Doctrine_Core::ATTR_FIELD_CASE, CASE_NATURAL):
    【解决方案2】:

    为了避免深入研究配置。在您的声明中使用""。 这使得列名对于某些数据库(如 PostgreSQL)区分大小写。

    例子:

    @ORM\JoinColumn(name="""Apples""", referencedColumnName="applies")
    

    【讨论】:

      猜你喜欢
      • 2016-11-24
      • 2014-02-17
      • 2016-05-15
      • 2012-05-13
      • 2012-07-03
      • 1970-01-01
      • 2013-12-24
      • 2015-02-22
      • 2011-09-12
      相关资源
      最近更新 更多