В моем приложении есть несколько простых таблиц справочной / справочной базы данных, используемых для предоставления списка разрешенных значений в связанной таблице.
(Вы знаете, в таблице «Страны» есть список стран, которые разрешены в поле «страна» таблицы адресов ...)
Чтобы моя модель данных была как можно более компактной, я использую " технику Билла Карвина * ", чтобы пропустить столбец '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');
В противном случае вы получите эту ошибку: «Неверное выражение пути. Должно быть выражением StateFieldPathExp.»
Сложите все объединения, необходимые для справочных таблиц, и в моих запросах много лишних затрат.
Кто-нибудь знает хороший способ избежать необходимости выполнять объединения с справочными / справочными таблицами в Doctrine 2?
(P.S. - Я бы предпочел избегать использования ENUM, так как они не поддерживаются Doctrine и имеют другие хорошо задокументированные недостатки .)