Doctrine 2 задыхается от столбцов таблицы Postgres

Мы используем Doctrine 2 для нового проекта и столкнулись с проблемой: Doctrine 2 подавляет имена столбцов таблицы Postgres с пробелами в них. Например, предположим, что есть столбец с именем «Продавец». Хотя мы с вами знаем, что в имени столбца не должно быть пробела, он все равно существует. Базы данных были разработаны много лет назад, и на них работают критически важные бизнес-системы, поэтому имена столбцов нельзя изменить. Есть ли способ обойти эту проблему, не взламывая Doctrine, чтобы справиться с этой ситуацией? Если нет, то как бы вы предложили решить эту проблему на стороне Доктрины?


person Scott T Rogers    schedule 23.03.2012    source источник


Ответы (1)


Похоже на очередной плохо закодированный ORM

http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/limitations-and-known-issues.html

http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/basic-mapping.html

Говорит полезные вещи, такие как: «Вы не можете использовать символы, отличные от [a-zA-Z0-9_]+, они нарушат несколько операторов SQL» и «Заключение идентификатора в кавычки не должно использоваться для разрешения использования нестандартных символов, таких как тире " и "Schema-Tool, вероятно, будет иметь проблемы, когда цитирование используется для учета регистра".

Похоже, это еще одна ORM, созданная кем-то, кто не хочет, чтобы она работала с реальными базами данных. Наличие столбцов с пробелами и т. д. в них не является блестящей идеей, но это совершенно законно в SQL.

У вас есть только три варианта:

  1. Переименуйте все столбцы (или оберните все представлениями).
  2. Взлом доктрины
  3. Доктрина дампа

Ни один из них не идеален, и я не уверен, что в вашем случае будет проще всего.

person Richard Huxton    schedule 23.03.2012
comment
Отличные ссылки! У нас есть пара парней в проекте, пытающихся внедрить хак, но это беспорядочно. Это неприятно использовать, и все же это даже не работает должным образом с нашими базами данных. - person Scott T Rogers; 23.03.2012
comment
В зависимости от того, насколько обширны такие проблемы, можно использовать представления. Но я подозреваю, что вы уже подумали об этом. - person Cerad; 24.03.2012