Предотвращение присоединения к ссылочным таблицам / справочным таблицам в Doctrine 2

В моем приложении у меня есть несколько простых справочных / справочных таблиц базы данных, используемых для предоставления списка разрешенных значений в связанной таблице.

(Вы знаете, что в таблице «Страны» есть список стран, которые разрешены в поле «страна» таблицы адресов ...)

Чтобы сохранить мою модель данных как можно более компактной, я использую " Техника Билла Карвина "пропуска столбца id в таблице поиска и использования фактического значения в качестве первичного ключа. Таким образом, вам не нужно выполнять соединение, чтобы получить значение в основной таблице. потому что он уже присутствует в качестве внешнего ключа.

Проблема в том, что Doctrine использует ссылки на объекты для всех ассоциаций, а это означает, что запросы по-прежнему требуют присоединения к таблицам поиска - даже если в основной таблице уже есть нужные мне значения.

Например, этот запрос не работает:

$qb->select(array('a.id', 'a.street', 'a.city', 'a.country'))
   ->from('Entity\Address', 'a');

Вместо этого вы должны сделать следующее:

$qb->select(array('a.id', 'a.street', 'a.city', 'c.country'))
   ->from('Entity\Address', 'a')
   ->join('a.country', 'c');

В противном случае вы получите следующую ошибку: «Недопустимое выражение PathExpression. Должно быть StateFie. ldPathExpression. "

Сложите все объединения, необходимые для таблиц поиска, и мои запросы будут стоить очень много.

Кто-нибудь знает хороший способ избежать необходимости выполнять соединения с таблицами поиска / справочными таблицами в Doctrine 2?

(PS - Я бы предпочел избегать использования ENUM, поскольку они не поддерживаются Doctrine и имеют другие хорошо задокументированные недостатки .)

5
задан Community 23 May 2017 в 11:54
поделиться