Doctrine архитектура и построение связей, как правильно?
философия доктрины - мы проекируем систему исходя из взаимодействия объектов, база данных лишь деталь реализации.
То есть у нас есть объекты User, UserEmail и UserCode. У объекта User есть поля emails и codes. Иии все. При желании мы можем сделать bidirectional связь и тогда у UserEmail/UserCode появится поле user, которое будет содержать владельца, но как правило это не нужно.
самый простой способ - создать эти таблицы в базе, настроить внешние ключи и сделать по этому рецепту.