m:n Feld ohne Wert updaten?

  • mimaxx mimaxx
    Jedi-Ritter
    0 x
    144 Beiträge
    1 Hilfreiche Beiträge
    16. 01. 2013, 15:35

    Hallo,

    habe ein Feld mit einer m:n Beziehung! Wähle ich aus dem select Feld im FE einen Wert aus und speichere funktioniert alles wunderbar. Auch wenn ich diesen Wert nochmal ändere oder noch weitere dazunehme/entferne wird alles in den entsprechenden Tabellen von extbase gespeichert.

    Jetzt das Problem, wenn ich alles deaktiviere, so dass es keine Beziehungen mehr geben soll, dann bleibt alles wie vorher. Was muss ich machen dass alle vorherigen Beziehungen gelöscht werden wenn im select alles deaktiviert wird.

    1. public function updateAction(Tx_MyExt_Domain_Model_myModel $myModel) {
    2. $this->myRepository->update($myModel);
    3. $this->redirect('list');
    4. }

    Gruß
    mimaxx


  • 1
  • kainobi kainobi
    Jedi-Ritter
    0 x
    141 Beiträge
    0 Hilfreiche Beiträge
    17. 01. 2013, 09:28

    Du machst alles richtig. Man würde es nicht meinen, aber das ist tatsächlich ein ... wie sag ich das jetzt möglichst diplomatisch ... "missing feature"? :o

    Siehe: http://forge.typo3.org/issues/42149

    Wenn Du die 4.7 verwendest, dann findest Du die entsprechende Stelle in der Klasse "Tx_Extbase_Property_PropertyMapper" in den Zeilen 176-185. Allerdings sind auch TypeConverter (z.B. der Tx_Extbase_Property_TypeConverter_PersistentObjectConverter) davon betroffen und weiters auch die Property-Validatoren (wenn du sie benötigst), welche alle darauf ausgerichtet sind, keine NULL-Values zu erhalten. Viel Spaß beim fixen ;-)

  • kainobi kainobi
    Jedi-Ritter
    0 x
    141 Beiträge
    0 Hilfreiche Beiträge
    17. 01. 2013, 09:39

    Mmh, sorry, das was ich geschrieben habe gilt nicht für m:n sondern nur für 1:n. Das betreffende Property bei Dir ist ein Objectstorage, richtig? Dann musst Du den ObjectStorageConverter fixen:

    1. class Tx_MyExt_Property_TypeConverter_ObjectStorageConverter extends Tx_Extbase_Property_TypeConverter_ObjectStorageConverter {
    2.  
    3. /**
    4.   * Actually convert from $source to $targetType, in fact a noop here.
    5.   *
    6.   * @param array $source
    7.   * @param string $targetType
    8.   * @param array $convertedChildProperties
    9.   * @param Tx_Extbase_Property_PropertyMappingConfigurationInterface $configuration
    10.   * @return array
    11.   * @api
    12.   */
    13. public function convertFrom($source, $targetType, array $convertedChildProperties = array(), Tx_Extbase_Property_PropertyMappingConfigurationInterface $configuration = NULL)
    14. {
    15. $objectStorage = new Tx_Extbase_Persistence_ObjectStorage();
    16.  
    17. if (count($convertedChildProperties)) {
    18. foreach ($convertedChildProperties as $subProperty) {
    19. $objectStorage->attach($subProperty);
    20. }
    21. } else {
    22.  
    23. // this ugly hack takes care, that the empty object storage get´s marked as modified;
    24. // without this it would not get persisted
    25. $tmp = new stdClass();
    26. $objectStorage->attach($tmp);
    27. $objectStorage->detach($tmp);
    28. }
    29.  
    30. return $objectStorage;
    31. }
    32.  
    33. }

  • 1