Hi Mat,

OK, wusste ich nicht.

Aber im Endeffekt wird es im Core so genutzt:

Abfrage der Tabelle der verknüpften Objekte, Schleife fügt Elemente mit 
attach() hinzu. Der ObjectStorage wird also nicht wie andere Objekte 
"aufgetaut". Die Definition des ObjectStorage soll sogar aktiv eine 
Serialisierung verhindern (siehe API Doku).

Im Controller: Objekte im ObjectStorage werden hinzugefügt, verändert oder 
rausgenommen.

Beim Persistieren:
ObjectStorage wird nochmals mit der Datenbank abgeglichen: Unbekannte 
hinzugefügt, nicht vorhandene entfernt, vorhandene abgeglichen (wenn sie 
ihrerseits "dirty" sind oder die Reihenfolge geändert wurde -> MM mit Sorting).

Zwischen "Auftauen" und "Einfrieren" findet also im Core kein Aufruf von 
_memorizeCleanState() und _isDirty() statt. Auch der direkte Zugriff auf 
Objekte innerhalb des ObjektStorage lösen kein _isDirty() des ObjektStorage aus 
(die Objekte wissen in der Regel nicht, dass sie in einem ObjectStorage sind – 
vielleicht hat man deshalb auch gleich ganz darauf verzichtet).

Grüße
Mark

Am 11.02.21, 09:26 schrieb "Matthew Colton" 
<typo3-german-boun...@lists.typo3.org im Auftrag von mat.col...@web-xs.de>:

    Hi Mark,

    die Methode _isDirty() gibt es tatsächlich:

    
https://api.typo3.org/10.4/class_t_y_p_o3_1_1_c_m_s_1_1_extbase_1_1_persistence_1_1_object_storage.html#a024770b8a32f7ee6dcd6c0e7d33e8bd5

    Es gibt auch _memorizeCleanState(), "clean" ist dabei der alte Zustand, 
    allerdings überschreibt der dann den dirty Zustand, also die geänderten 
    Werte. In meinem Test selbst dann wenn ein neues Objekt erzeugt wird, 
    bzw eine Kopie. Arrrrggggg....

    Cheers
    Mat

    Am 11.02.21 um 08:45 schrieb Mark Boland:

    > Hallo Mat,
    >
    > ich glaube auch, dass ObjectStorage dir da nicht weiterhelfen wird. Nach 
meinen Erkenntnissen ist das Objekt relativ doof und kennt so etwas wie dirty 
nicht. Es ist nur ein Container für die enthaltenen Objekte (die du wiederum 
abfragen kannst) und wird selbst nicht persistiert.
    >
    > Grüße
    > Mark
    >
    >> Am 10.02.2021 um 18:46 schrieb _...@freenet.de:
    >>
    >> Hallo Mat,
    >>
    >> Mir ist aber nicht ganz klar, was du damit erreichen möchtest.
    >>
    >> wenn ich es richtig weiß, wird ein Objekt erst nach dem Verlassen des
    >> Controller persitiert. Das ObjectStorage macht keinen Vorab-Vergleich zu
    >> einem möglicherweise bestehenden Object. Den müsstest du vermutlich
    >> selbst schreiben(Count-Abfrage)
    >>
    >>
    >> Ich verstehe den Anlass für dein Problem nicht?
    >>
    >> Wenn du mit mm_relationen arbeitest, dann steht in dem zugeordneten
    >> Relationsfeld aus deinem Model in der Regel die Anzahl der über dieses
    >> Feld relational verknüpften Elementen. (Die MM-Relationen sollen, wo ich
    >> glaube irgendwann mal gelesen zu haben, auch funktionieren, wenn in dem
    >> Feld ein falscher Wert drinsteht. Ich habe kein großes Vertrauen in den
    >> Wert in diesem Feld.)
    >>
    >> Mit besten Grüßen
    >>   Dieter
    >>
    >>> Am 10.02.2021 um 09:21 schrieb Matthew Colton:
    >>> Hallo Leute,
    >>>
    >>> ist hier wirklich niemand bisher über das Problem gestolpert?
    >>>
    >>> -- 
    >>>
    >>> Cheers
    >>> Mat
    >>>
    >>>> Am 04.02.21 um 11:14 schrieb Matthew Colton:
    >>>> Hallo allerseits,
    >>>>
    >>>> ich möchte in einem Controller beim Update von einem Objekt wissen ob
    >>>> eine bestimmte Relation geändert wurde. Normalerweise würde ich wie
    >>>> folgt vorgehen:
    >>>>
    >>>> $company->getTitle()->_isDirty();
    >>>>
    >>>> Das funktioniert ja auch super solange die Eigenschaft kein
    >>>> ObjectStorage ist. Wie kann ich prüfen ob ein ObjectStorage verändert
    >>>> wurde? Also ob dem ObjectStorage ein Objekt hinzugefügt oder entfernt
    >>>> wurde.
    >>>>
    >>>> Vielen Dank im Voraus!
    >>>>
    >>>>
    >>>> _______________________________________________
    >>>> TYPO3-german mailing list
    >>>> TYPO3-german@lists.typo3.org
    >>>> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
    >>> _______________________________________________
    >>> TYPO3-german mailing list
    >>> TYPO3-german@lists.typo3.org
    >>> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
    >> _______________________________________________
    >> TYPO3-german mailing list
    >> TYPO3-german@lists.typo3.org
    >> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
    > _______________________________________________
    > TYPO3-german mailing list
    > TYPO3-german@lists.typo3.org
    > http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
    _______________________________________________
    TYPO3-german mailing list
    TYPO3-german@lists.typo3.org
    http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german


_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

Antwort per Email an