Как в symfony/doctrine у entity которая поступает не из БД, построить relation?
Есть у меня некая сущность.
Данные для данной сущности выгребаются не из БД, а вытаскиваются GET запросом из стороннего сервиса.
Для этой сущности хранятся комментарии и какие-либо другие данные, но хранятся они уже на моем сервере в MySQL.
Что я хочу сделать:
Вытащили данные (JSON) из сервиса, замапили на объект внутри приложения.
И используя метод "getReviews()" вызывать ленивую загрузку к БД приложения.
Как правильно это организовать в концепции доктрины?
То о чем вы говорите это не сущность, это POPO (Plain Old PHP Object).
А опишите задачу конкретнее. Что дальше будет происходить с этим объектом? А с связанными с ним объектами (reviews)?
Руслан Квашнин: Для начала без сохранения. Мне это нужно для работы со связями.
Объект формируется из данных поступающих из JSON и из MySQL (если мы захотели достать отзывы к данному объекту) и все выглядит однородно, как обычный Lazy Loading.
А в будущем можно и сохранение будет добавить.
Например та часть объекта которая была получена со стороннего сервиса, будет опять в этот сервис посылать POST с изменениями.
И если все нормально, делать изменения еще и в базе приложения - транзакционность такого подхода, это уже другая тема.
Смысл в том чтобы сделать эту работу более лаконично, также это позволит добавлять связи в будущем с меньшими трудозатратами.
Дык а в чем проблема работы со связями? Вы получаете PersistentCollection (связанные объекты), сетите их в свой объект - так и работайте с ними, добавляйте, сохраняйте и т.д.
А для вашего исходного объекта - не нужно в общем использовать Doctrine, он же не связан с БД никак, а Doctrine - ORM framework.
Например сущность у вас Product:
Сделайте сервис(ProductManager) который инстанциирует ваш объект (получает данные из стороннего сервиса, данные из БД, компонует это все дело и отдает)
Связанные сущности - не будут иметь проблем при работе с БД. ($em->persist($product->getReviews))
А понадобиться добавить сохранение объекта - реализуете его в этом же сервисе ($productManager->save()) в котором и реализуете логику сохранения используя сторонний апи.