Doctrine - PostgreSQL - 表/字段名称中的大写和空格

时间:2012-12-10 19:37:03

标签: php sql postgresql pdo doctrine-orm

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

示例:(是的,我们正在努力从中迁移)

SELECT "Field Name"
FROM "Table Name"

我们也有两种格式的混合

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

使用doctrine时,我收到了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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:-1)

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

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

更新似乎这可能已在最新版本的doctrine2中得到纠正。它现在取代了不可接受的字符。