Lehre 2 PrePersist wird nicht ausgelöst

Lesezeit: 2 Minuten

Benutzer-Avatar
Tom

Innerhalb derselben Entität habe ich ein PreUpdate und ein PrePersist. Das PreUpdate wird ausgelöst, aber das PrePersist nie. Ich habe ein die() nach dem Flush und Kommentaren innerhalb der Lifecycle-Callbacks. Die vollständige Entität kann unter eingesehen werden http://pastebin.com/yUk1u4GQ

Rückrufe von Entitäten

/**
* @PreUpdate
*/
public function fixDates(){
    $this->updatedOn = $this->getNow();
    $this->closedDate = null;
    $this->openDate = null;
    print "dates fixed";
}

/**
* @PrePersist
*/
public function prePersist() {
    print 'in prePersist';
    die();
}

Entity Manager-Anrufe

$em->persist($school);

$em->flush();
die();

Mein Bildschirm zeigt “Termine fixiert”, aber nicht die prePersist-Meldung. Ich habe die @HasLifecycleCallbacks an der Spitze der Entität.

Vergessen Sie nicht, Lifecycle Callbacks in Ihrer Klassenanmerkung zu aktivieren:

/**
 * Report\MainBundle\Entity\Serveur
 * @ORM\HasLifecycleCallbacks
 */
class Serveur {

  • Das war mein Problem. Vielen Dank!

    – Jasonlfunk

    14. Mai 2015 um 16:21 Uhr

  • ich habe gefehlt @HasLifecycleCallbacks. Vielen Dank!

    – MParsons

    16. Mai 2016 um 14:18 Uhr

Benutzer-Avatar
Johann

PrePersist wird nur ausgelöst, wenn Sie auftreten INSERT Aussage, nicht UPDATE Aussage.

Vergessen Sie beim Testen nicht, dass die UPDATE -Anweisung wird nur ausgelöst, wenn sich die Entitätsattribute wirklich ändern. Wenn der Entity Manager aufgerufen wird, um diese Entität beizubehalten, prüft er zuerst, ob es Änderungen gibt. Wenn nicht, wird keine SQL-Abfrage durchgeführt und nein @PreUpdate Methode aufgerufen wird.

  • Hochgestimmt. Ich habe das auch auf die harte Tour herausgefunden (über Schritt-Debugging), als mein Code nicht wie erwartet funktionierte. IMO macht die aktuelle Dokumentation dies nicht klar genug, was ein leichter Fehler ist.

    – iainp999

    30. Mai 2014 um 12:33 Uhr

Ich weiß, dass diese Frage fast 2 Jahre alt ist, aber ich hatte gerade genau das gleiche Problem und da dies keine akzeptierte Antwort hat, möchte ich eine letzte Sache teilen, die alle anderen vergessen haben zu erwähnen.

Obwohl es scheint, dass die ausgelöste Methode nur von der Entitätsklasse selbst verwendet wird, sollte ihr Geltungsbereich öffentlich gehalten werden. Meine Methode löste nicht aus, nur weil ich sie als geschützt markiert hatte. Ich hoffe, das wird jemandem helfen.

  • Das war auch mein Problem! Zusammen mit @ORM\HasLifecycleCallbacks

    – Guss

    29. April 2019 um 15:20 Uhr

Ich hatte gerade das gleiche Problem. Hoffe das hilft dir:

Ich habe vergessen, die Anmerkungen mit der use-Anweisung zu importieren. Wenn Sie dies versuchen, vergessen Sie nicht, das Präfix “ORM” hinzuzufügen:

use Doctrine\ORM\Mapping as ORM;

// ...

/**
* @ORM\PreUpdate
*/
public function preUpdate()
{
}

Vielleicht ist es versionsabhängig, aber meine Arbeitsanmerkungen haben eine nächste Ansicht:

Anmerkung zur Lebenszyklusklasse:

/**
 * @Entity @Table(name="table_name")
 * @HasLifecycleCallbacks
 **/

Anmerkungen zu Veranstaltungen:

/** @PrePersist **/
/** @PreUpdate **/

Das ist alles, was ich in Model habe.

  • Ja!! Gemäß Dokumenten in Doktrin 2 Markiert eine Methode auf der Entität, die als @ PrePersist-Ereignis aufgerufen werden soll. Funktioniert nur mit @ HasLifecycleCallbacks in der Entitätsklasse PHP DocBlock.

    – Leonardo Beal

    16. August 2017 um 6:43 Uhr

  • Ja!! Gemäß Dokumenten in Doktrin 2 Markiert eine Methode auf der Entität, die als @ PrePersist-Ereignis aufgerufen werden soll. Funktioniert nur mit @ HasLifecycleCallbacks in der Entitätsklasse PHP DocBlock.

    – Leonardo Beal

    16. August 2017 um 6:43 Uhr

1101040cookie-checkLehre 2 PrePersist wird nicht ausgelöst

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy