В моем приложении у меня есть несколько простых справочных / справочных таблиц базы данных, используемых для предоставления списка разрешенных значений в связанной таблице.
(Вы знаете, что в таблице «Страны» есть список стран, которые разрешены в поле «страна» таблицы адресов ...)
Чтобы сохранить мою модель данных как можно более компактной, я использую " Техника Билла Карвина "пропуска столбца 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 и имеют другие хорошо задокументированные недостатки .)