Sagen wir, ich habe zwei Tabellen: Category
und Product
und Product
Links zu Category
mit einem Fremdschlüssel Production.categoryId == Category.id
. Ich möchte, dass mein Datenbankserver sich darum kümmert, die Anzahl der Produkte in einer Kategorie mit dem denormalisierten Feld Category.productCount zu zählen - die Trigger aktualisieren diese Zählung bei jeder Aktualisierung/Löschung/Einfügung, so dass ich mich nicht darum kümmern muss. Gibt es eine Möglichkeit, datenbankseitige Auslöser irgendwie mit Doctrine2-Entitäten zu synchronisieren? Ich möchte diese Zähler auf PHP-Seite nicht neu berechnen, da wir sie auf mehreren Servern ausführen werden.Doctrine2 und Datenbank-Seite löst für denormalisierter Felder
2
A
Antwort
1
Wenn ich die Frage verstehe, dass Sie in der Lage sein möchten, ein neues Produkt zu einer Kategorie hinzuzufügen, persistieren Sie es dann Category.productCount Update selbst aus der Datenbank? Sie können verwenden
$entityManager->refresh($category);
Um eine Entität von der Datenbank neu zu laden. Ich habe es selbst nicht getan, aber ich würde erwarten, dass Sie die Lebenszyklus-Funktionalität verwenden können, um dies zu automatisieren.
Aber ich frage mich, ob es nicht besser sein könnte, den Zähler nur lokal zu erhöhen, ohne ihn in der Datenbank zu belassen. Lassen Sie Ihren Trigger die Datenbankoperation ausführen, aktualisieren Sie die Anzahl jedoch innerhalb der Anforderung lokal.
Verwandte Themen
- 1. Doctrine2 findBy Beziehungsobjekt löst Zeichenfolgenkonvertierungsfehler aus
- 2. Python: kleinster denormalisierter Doppelfehler
- 3. Doctrine2 move unveränderliche Felder in separate Klasse
- 4. Doctrine2 Querybuilder bitweise und
- 5. Doctrine2 Mapping: 2 Felder zu einem Feld zugeordnet (ManyToOne)
- 6. Pagerfanta und Doctrine2 COUNT Optimierung
- 7. Doctrine2 + Join Bedingungen
- 8. Doctrine2 Paginator
- 9. Wie benutzt man ZendOpCache für Doctrine2 Cache?
- 10. Doctrine2: Abhängigkeitsdiagramm für eine Menge von Entitäten
- 11. Verwenden Sie Anweisung für @OneToOne - Doctrine2
- 12. Doctrine2 unveränderliche Entitäten und hängen nur Datenstrukturen
- 13. Doctrine2: Willkürliche beitreten und einzelne Tabelle Vererbung
- 14. Symfony2/Doctrine2: catch QueryException und Ausgabe Abfrage
- 15. Verwenden Limit und in Doctrine2 Abfrage Offset
- 16. ZendFramework-1.11.11 und doctrine2-2.2.0-BETA2 gibt
- 17. graphql löst nur _id-Feld auf, andere Felder sind null
- 18. Doctrine2 Batch Insert
- 19. Doctrine2 Paginator bekommen Gesamtergebnisse
- 20. benutzerdefinierte Felder und Post-Typen für Ghost
- 21. c structs, Zeiger und Speicherzuordnung für Felder
- 22. private Felder und Methoden für eine Struktur
- 23. Doctrine2/Abfrage Diskriminator Wert
- 24. Doctrine2 Zuordnungszuordnung mit Bedingungen
- 25. Doctrine2 OneToMany ohne mappedBy
- 26. Doctrine2 ManyToMany Selbstreferenzierung
- 27. Doctrine2 mit setParameters
- 28. Liste der Doctrine2-Ausnahmen
- 29. Warum löst FxCop den Fehler "Typen, die Einwegfelder besitzen, für eine Klasse ohne verfügbare Felder aus?"
- 30. Wie Felder für null
Das klingt nach einer guten Idee, danke! Das einzige Problem, das ich sehe, ist, dass Doctrine die denormalisierten Felder mit jeder Insert- oder Update-Anweisung an die Datenbank sendet ... Gibt es eine Möglichkeit, Doctrine mitzuteilen, dass ein Feld in diesem Sinne "schreibgeschützt" ist? Sonst kann ich einen Trigger auf der Serverseite haben, der denormalized counts auf Einfügungen und Updates ignoriert ... was auch funktionieren würde, denke ich;) – KOHb
Ich bin mir nicht sicher über das nur lesen. Möglicherweise ist es besser, eine Änderungsverfolgungsrichtlinie zu verwenden, z. B. explizite explizite http://docs.doctrine-project.org/projects/doctrine-orm/en/2.1/reference/change-tracking-policies.html, und vermeiden Sie einfach, die Kategorie beizubehalten Objekt vollständig. – Cerad