Возможно ли редактирование неполных сущностей в доктрине?

Суть вопроса вот в чем: если выбрать сущность с ограниченным набором полей с помощью partial, возможно ли вообще использовать её для последующего изменения в БД? Например выбираем только id в процессе работы приложения изменяем значение value и запускаем flush(), что бы в БД изменилось только значение value, потому что остальные поля естественно null.

Предвосхищаю в принципе резонный вопрос зачем так извращаться, приложение работает с большими данными причем довольно часто, выбирать каждый раз все поля когда зачастую нужно отредактировать только одно довольно накладно.
  • Вопрос задан
  • 224 просмотра
Решения вопроса 1
@thatside
Если я правильно понимаю док по доктрине - то нельзя. Цитирую:

Use of partial objects is tricky. Fields that are not retrieved from the database will not be updated by the UnitOfWork even if they get changed in your objects. You can only promote a partial object to a fully-loaded object by calling EntityManager#refresh() or a DQL query with the refresh flag.

отсюда
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Предвосхищаю в принципе резонный вопрос зачем так извращаться, приложение работает с большими данными причем довольно часто, выбирать каждый раз все поля когда зачастую нужно отредактировать только одно довольно накладно.

Тогда не понятно почему вы вообще используете Doctrine ORM. Вы вкурсе что происходит при Flush? (если конечно не меняли ChangeTrackingPolicy, но тогда и что внутри flush вы тоже должны знать)

Вообще подобные задачи, если вам в принципе плевать на внутреннее состояние ваших энтити, то есть вы прекрасно знаете что вы меняете и зачем - лучше использовать DBAL или DQL напрямую в репозитории.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы