Doctrine - PostgreSQL - Uppercase and Spaces in Ta

2019-08-31 05:29发布

Having issues with Doctrine 2.3 and PostgreSQL with Spaces and Upper case Field / Table names

Example: ( Yes we are working on migrating away from this )

SELECT "Field Name"
FROM "Table Name"

We also have a mix of the two formats

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

When using doctrine I'm getting a PDOException. When looking at the error I see that there are no double quotes around Fields / Tables ( names ) that have Upper case and Spaces.

Is there a fix? Workaround?

Here is an example of what Doctrine is generating

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

Here is how I need it

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

2条回答
倾城 Initia
2楼-- · 2019-08-31 06:04

Unfortunately the accepted answer won't work in the presented situation. The backticks will not work as every column in a doctrine query gets an alias by using the lower cased name with an appended identifier. This alias would have spaces in it and would therefore generate a sql error when passed to postgres.

The only way this could be corrected is in Doctrine itself when the query is generated.

update it seems this may have been corrected in the latest version of doctrine2. It now replaces non acceptable characters.

查看更多
一夜七次
3楼-- · 2019-08-31 06:19

You may need to use backticks to let Doctrine know that it should be quoted: Quoting reserved words. E.g:

<?php
/** @Column(name="`number`", type="integer") */
private $number;
查看更多
登录 后发表回答