[Frage] Beziehung n:1 lösen/löschen in der updateAction?

  • mimaxx mimaxx
    Jedi-Ritter
    0 x
    144 Beiträge
    1 Hilfreiche Beiträge
    31. 07. 2013, 11:10

    Hallo,

    habe eine n:1 Beziehung zu Tx_Extbase_Domain_Model_FrontendUser ist kein Wert angegeben trägt typo '0' ein, ist ein User eingetragen wird entsprechend die "uid" eingetragen. Soweit so gut. Nun möchte ich wenn der Status im Edit wieder auf 0 gesetzt wird (Status ist auch ein eigenes Feld), dass der User und ein Datum wieder ausgetragen werden.

    Bei dem Datum klappt es auch bei der User nicht

    1. if($service->getStatus()==0){
    2. $service->setDatecompleted('');
    3. $service->setFeUserCompletedId(0);
    4. }

    [b]Error: Argument 1 passed to Tx_SpiesInventar_Domain_Model_Service::setFeUserCompletedId() must be an instance of Tx_Extbase_Domain_Model_FrontendUser[/b]

    Hat jemand eine Lösung?

    Gruß
    mimaxx


  • 1
  • emeh emeh
    Padawan
    0 x
    41 Beiträge
    2 Hilfreiche Beiträge
    31. 07. 2013, 15:18

    Was macht denn dein setFeUserCompleteId()? Es scheint einen Tx_Extbase_Domain_Model_User setzen zu wollen, der Bezeichner für die Eigenschaft (das Suffix Id) scheint mir recht ungeeignet.

    Hast du mal versucht, nicht auf 0, sondern auf null zu setzen?

  • mimaxx mimaxx
    Jedi-Ritter
    0 x
    144 Beiträge
    1 Hilfreiche Beiträge
    31. 07. 2013, 15:36

    Hi,

    FeUserCompletedId ist eine n:1 Beziehung zu Tx_Extbase_Domain_Model_FrontendUser. Grundsätzlich funktioniert auch alles mit dem Feld. Dort steht ja später die uid des FeUsers drin. Habe halt nur das Problem die "uid", wenn Sie in der Tabelle steht, per update wieder auf '0' zu setzen!
    Habe auch schon NULL und '' versucht. Dann habe ich noch versucht über

    * @param Tx_Extbase_Domain_Model_FrontendUser $variable
    $variable = 0;
    $service->setFeUserCompletedId($variable);

    Mir gehen nur langsam die Ideen aus

    Gruß
    mimaxx

  • emeh emeh
    Padawan
    0 x
    41 Beiträge
    2 Hilfreiche Beiträge
    31. 07. 2013, 15:59

    Laut diesem Beitrag [url]http://stackoverflow.com/questions/15408900/how-to-reset-a-property-with-an-11-relation-in-an-extbase-model[/url] kann durch NULL-Setzen gelöscht werden. Vielleicht kommts ja auf die Großschreibung an. Ich weiß es nicht. Ich weiß aber genau, dass ich das selbe Problem auch schon mal hatte, kann mich aber nicht entsinnen, ob ich das Problem lösen konnte oder anders umschifft habe :-/

  • kitsunet kitsunet
    Flash Gordon
    0 x
    2559 Beiträge
    27 Hilfreiche Beiträge
    31. 07. 2013, 16:57

    Wichtig NULL !== 0

    NULL ist kurzgesagt eine leere Variable, während 0 ein integer ist.

    Der Error:
    Argument 1 passed to Tx_SpiesInventar_Domain_Model_Service::setFeUserCompletedId() must be an instance of Tx_Extbase_Domain_Model_FrontendUser

    sagt mir, dass die Methode eigentlich anders benannt werden müsste...

    setFeUserCompletedId() klingt für mich nach "Ich muss eine Id, also einen Integer setzen"

    sollte demnach setFeUserCompleted() heißen und dann mit NULL auch löschbar sein.

    config.baseURL = http://www.kitsunet.com/
    TYPO3 Flow und Neos Community Contact
    Release Manager TYPO3 Neos 1.1
    Ich habe Probleme mit den PMs hier, also schreibt mir bitte eine Mail oder über Twitter!

  • mimaxx mimaxx
    Jedi-Ritter
    0 x
    144 Beiträge
    1 Hilfreiche Beiträge
    01. 08. 2013, 11:59

    Hi,

    erstmal Danke für die Rückmeldungen! Also die Variable $feUserCompletedId ist so schon richtig!

    Wenn ich zum Test statt den alten Wert auf NULL zu setzen eine beliebige neue Beziehung eintrage funktioniert es.

    1. public function updateAction(Tx_MyExt_Domain_Model_Service $service) {
    2.  
    3. if($service->getStatus()==0){
    4. $service->setDatecompleted('');
    5. $user = $this->userRepository->findByUid(36);
    6. $service->setFeUserCompletedId($user);
    7. }

    Wenn ich $user = NULL oder $user = 0 nehme kommt wieder der Fehler, weil dann ja keine Instanz zur FeUser Tabelle gegeben ist.

    Wenn ich im Domain Model folgende Änderung vornehme geht es zwar, aber ich denke das ist nicht Sinn der Sache. Da muss es noch eine elegantere Lösung geben

    1. public function setFeUserCompletedId(Tx_Extbase_Domain_Model_FrontendUser $feUserCompletedId) {
    2. $this->feUserCompletedId = $feUserCompletedId;
    3. }
    4.  
    5. /* geaendert in */
    6. public function setFeUserCompletedId($feUserCompletedId) {
    7. $this->feUserCompletedId = $feUserCompletedId;
    8. }

    Muss irgendwie eine Instanz mit NULL hinbekommen

    Gruß
    mimaxx

  • emeh emeh
    Padawan
    0 x
    41 Beiträge
    2 Hilfreiche Beiträge
    01. 08. 2013, 16:40

    Dein Attribut $feUserCompletedId enthält in der Datenbank natürlich die ID des Users. In Extbase enthält das Attribut aber ein Objekt der Klasse $feUser. Ein Objekt, keine Id des Objektes. Daher ist der Name des Attributes nicht sinnvoll. Das ist das, was kitsunet und ich meinen. Natürlich funktioniert das völlig unabhängig vom Namen, wenn alles richtig konfiguriert ist, aber irritierend ist der Attributname allemal beim Programmieren oder beim lesen deines Codes.

    Die PHP-Doc-Kommentare für das Attribut und den Getter/Setter sind richtig? Du hast auch wirklich NULL und nicht null geschrieben?

  • 1