【问题标题】:Doctrine - PostgreSQL - Uppercase and Spaces in Table / Field namesDoctrine - PostgreSQL - 表/字段名称中的大写和空格
【发布时间】:2012-11-28 06:38:28
【问题描述】:

Doctrine 2.3 和 PostgreSQL 的空格和大写字段/表名称存在问题

示例:(是的,我们正在努力摆脱这种情况)

SELECT "Field Name"
FROM "Table Name"

我们也有两种格式的混合

SELECT "Field Name", another_field_name
FROM "Table Name", another_table_name

使用原则时,我得到了 PDOException。查看错误时,我发现字段/表(名称)周围没有双引号,具有大写和空格。

有解决办法吗?解决方法?

这是 Doctrine 生成的示例

SELECT t0.TheId AS theid1, t0.Name AS name2, t0.User AS user3
FROM The Table t0 
WHERE t0.TheId = 1234

这就是我需要的方式

SELECT t0."TheId" AS theid1, t0."Name" AS name2, t0."User" AS user3
FROM "The Table" t0 
WHERE t0."TheId" = 1234

【问题讨论】:

  • 那是一种可怕的命名方式。教义不会是唯一有问题的工具。虽然它在 SQL 中“合法的”,但它仍然不是一个好主意。
  • @a_horse_with_no_name 是的,我 100% 同意,我们正在尝试摆脱这种遗留数据结构,但现在需要支持它

标签: php sql postgresql pdo doctrine-orm


【解决方案1】:

不幸的是,接受的答案在当前情况下不起作用。反引号将不起作用,因为原则查询中的每一列都通过使用带有附加标识符的小写名称来获取别名。这个别名中会有空格,因此在传递给 postgres 时会产生 sql 错误。

唯一可以纠正这种情况的方法是在生成查询时在 Doctrine 本身中。

更新似乎这可能已在最新版本的学说2中得到纠正。它现在替换了不可接受的字符。

【讨论】:

    【解决方案2】:

    您可能需要使用反引号让 Doctrine 知道它应该被引用:Quoting reserved words。例如:

    <?php
    /** @Column(name="`number`", type="integer") */
    private $number;
    

    【讨论】:

    猜你喜欢
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 2022-06-30
    • 2016-09-20
    • 2014-02-17
    • 2013-05-16
    相关资源
    最近更新 更多