Po pomyślnym deserializacji łańcucha JSON do jednostki Doctrine ze skojarzeniami. W przypadku uporczywości Doctrine zawsze identyfikuje te powiązania jako "nowe elementy". Jak mogę zaktualizować powiązania po prostu przez identyfikator i nie zmieniać wartości powiązanych jednostek, jeśli są jakieś zmiany?Trwałe jednostki doktryny z powiązaniami, które zostały deserialized z JMSSerializer
Mój przypadek:
Mam niektóre tabele bazy danych z danymi statycznymi. Najprostszy służy do przechowywania jednostek. (Mam jednostkę doktryny zwaną Jednostką). Stół jest tak:
|id|name |ratio |
|1 |mgr |1 |
|2 |gr |1000 |
|3 |Kgr |1000000|
Następnie, użytkownik może stworzyć produkt, który ma również podmiot po stronie serwera doktryny o nazwie Jednostka. Używam klienta modelu backbone.js boczne i po aktualizacji to wysłał do mojego Symfony2 aplikacji tak:
//Item object to be serialized into Item entity
{
id: 13141
weight: 100
unit: {
id:1
name:mgr
ratio:1
}
//many more attributes here
}
Teraz deserializowania z JMSSerializer, wszystko jest w porządku, ale chcę doktryna zaktualizować tylko identyfikator jednostki relację, a nie całą Jednostkę.
Kiedy upiera się, doktryna skarży się i mówi mi, że znalazł "nową jednostkę jednostki" (co nie jest tym, czego chcę) i każe mi ustawić kaskadę na persist
w encji doktryny. Ale jeśli to zrobię, a ktoś zmieni urządzenie json, czy to nie zmieni mojej tablicy jednostek statycznych?
Na przykład: Bad użytkownik modyfikuje JSON, wysyłając w ten sposób:
//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
}
pewno nie chcemy aby tak się stało. Chcę tylko dodać jednostkę o id: 1 do przedmiotu.
Ten przypadek jest prosty i mogłem po prostu pobrać jednostkę przez Id, a następnie ustawić ją na encję, ale w mojej prawdziwej aplikacji jednostka Item jest znacznie większa, więc chcę obsłużyć to automatycznie.
¿Wszelkie pomysły?