Max Ba, вы пишете, что не знаете, соединять ли create и createContact, и при этом знаете, что у вас транзакция. Ну так где ещё вы оформите транзакцию, если не в модели? В таком случае контроллер уже вызовет единственный метод, который все разрешит сам
animr, необязательно обрезать после вывода из базы, достаточно обрезать до сохранения в нее, чтобы ваша кодировка испортилась, так что ищите проблему с двух сторон
Виталий Хоменко, да, разумеется, я сам всегда использую id, это удобнее и надежнее, как вы сказали. Не знаю, зачем я во второй части своего ответа посоветовал использовать email, просто как вариант, а не золотое решение.
Max Ba, так если транзакция, то конечно в одном методе, а так как работе с базой данных в контроллере не место, то в контроллере вы должны вызвать уже метод create, в котором вызывается транзакция, ну и так далее.
Виталий Хоменко, справедливости ради, нельзя разрешать просто так менять email. Хочет поменять, пусть меняет, но перед этим отправляете письмо на почту, чтобы он подтвердил ее реальность, а уже в методе подтверждения авторизуете его заново с новыми аутентификационными данными.
Во-первых, зачем вы явно создаёте объект репозитория? Используйте внедрение зависимостей. Во-вторых, в вашем случае или голый джоин, или ArrayCollection.
Froskyta_1, для начала изучите композер, а потом поймете, чему надо указывать (всему: и интерфейсам, и классам, и трейтам, и исключениям, и даже функциям).