После успешной десериализации строки json в объект Doctrine с ассоциациями. При сохранении Doctrine всегда определяет эти ассоциации как «новые объекты». Как я могу обновить ассоциации только по идентификатору, а не изменять значения связанных сущностей, если есть какие-либо изменения?
Мое дело:
У меня есть несколько таблиц базы данных со статическими данными. Самый простой — для хранения юнитов. (У меня есть доктрина под названием Unit). Таблица такая:
|id|name |ratio |
|1 |mgr |1 |
|2 |gr |1000 |
|3 |Kgr |1000000|
Затем пользователь может создать элемент, который также имеет сущность доктрины на стороне сервера, называемую единицей. Я использую модель backbone.js на стороне клиента, и при обновлении она отправляется в мое приложение Symfony2 следующим образом:
//Item object to be serialized into Item entity
{
id: 13141
weight: 100
unit: {
id:1
name:mgr
ratio:1
}
//many more attributes here
}
Теперь я десериализую с помощью JMSSerializer, все в порядке, но я хочу, чтобы доктрина обновляла только идентификатор модуля отношения, а не весь модуль.
Когда я настаиваю, доктрина жалуется и сообщает мне, что он нашел «новую сущность Единицы» (чего я не хочу), и говорит мне установить каскад на persist
в сущности доктрины. Но если я сделаю это, и кто-то изменит модуль json, разве это не изменит мою статическую таблицу модулей?
Например: Плохой пользователь изменяет Json, отправляя это:
//BAD item object to be serialized into Item entity
{
id: 13141
weight: 100
unit: {
id:1
name:BadName //Will this get persisted to the database?
ratio:1
}
//many more attributes here
}
Я, конечно, не хочу, чтобы это произошло. Я просто хочу добавить единицу с id: 1 к элементу.
Этот случай прост, и я мог бы просто получить единицу по идентификатору, а затем установить его в сущность, но в моем реальном приложении сущность Item намного больше, поэтому я хочу обрабатывать это автоматически.
Есть идеи?