Beiträge getagged mit Doctrine

Ein Blick auf Doctrine Core Behaviors

Beim Planen einer Datenbank/des Modells für eine Internetseite trifft man immer wieder auf Objekte (aus dem Modell) mit Gemeinsamen Eigenschaften/Verhalten. Plant man einen Blog hat man zum Beispiel ein Klasse für Artikel und eine für Kommentare, beide verfügen wahrscheinlich über Attribute wie created_at und updated_at. Für solche Gemeinsamen Eigenschaften gibt es in Doctrine so genannte Templates/Behaviors. Ich möchte hier nicht erklären wie man Templates selbst schreibt, sondern viel mehr zeigen welche Core Behaviors Doctrine bereitstellt.

Das einfachste Verhalten ist wohl das Timestampable Behavior. Stellt man dieses Verhalten in seiner schema.yml ein

article:
  actAs:
    Timestampable:

wird automatisch ein Feld created_at und updated_at erstellt. Wenn man nun ein Artikel erstellt speichert Doctrine automatisch das Erstellungsdatum, so wie das Datum der letzten Änderung. Mit weiteren Einstellungen kann man den Namen der Felder verändern, die Speicherung ausschalten oder das Format bestimmen.

Ein weiteres Verhalten ist das Versionable Behavior. Mit Hilfe dieses Templates kann man zum Beispiel eine einfache Versionierung seiner Blogartikel umsetzen. Hierfür passen wir den actAs Bereich unserer schema.yml wie folgt an:

article:
  actAs:
    Timestampable:
    Versionable:
      versionColumn: version
      className: %CLASS%Version

Nun erstellt Doctrine eine neue Tabelle namens article_Version. Wenn man nun einen Artikel ändert, wird das alte Artikel-Objekt in der Tabelle article_Version abgespeichert und mit einer Versionsnummer versehen. In der Anwendung kann man dann einfach auf ältere Versionen zugreifen.

Für unsere Blogartikel wären außerdem noch Suchmaschinen optimierte und vom Menschen lesbare URLs interessant. Dafür brauchen wir eine eindeutige Überschrift, was man aber nicht immer hat. Auch hierfür gibt es ein Behavior namens Sluggable. Sluggable erstellt aus zuvor angegebenen Feldern eindeutige Slugs (hängt notfalls Zahlen an das Ende und ersetzt Leerzeichen mit Bindestrichen) und speichert diese ab. Diese Slugs kann man dann als eindeutige Identifizierung für die Blogartikel benutzen. Wir passen also wieder unsere schema.yml an:

article:
  actAs:
    Timestampable:
    Versionable:
      versionColumn: version
      className: %CLASS%Version
    Sluggable:
      fields: [title]

Auch hier legt Doctrine ein neues Feld namens Slug an und speichert dort eine Eindeutige Zeichenkette ab. Natürlich gibt es auch hier noch weitere Konfigurationsmöglichkeiten.

Nun möchten wir unsere Blogartikel noch einfach durchsuchbar machen, ohne weitere Bibliotheken wie Apache Lucene bzw Zend Lucene zu nutzen. Auch hierfür gibt es wieder ein Verhalten namens Searchable. Also passen wir wieder unsere schema.yml an:

article:
  actAs:
    Timestampable:
    Versionable:
      versionColumn: version
      className: %CLASS%Version
    Sluggable:
      fields: [title]
    Searchable:
      fields: [title, article]

Nun legt Doctrine eine Tabelle article_index an und speichert dort ausgewählte Keywords ab. Indiziert werden hier Wörter die im title oder article Feld häufig vorkommen. Später kann man dann mit dem ArticleTable Objekt nach einem Eintrag suche. Dieses Behaviors bietet noch viele weitere Konfiguartions- bzw Anpassungsmöglichkeiten.

Es gibt noch ein paar weitere Core Behaviors, wie I18n, NestedSet, Geographical oder SoftDelete, welche sehr individuell konfiguriert werden könne. Auch die hier gezeigten Behaviors verfügen noch über viele weitere Einstellungsmöglichkeiten, welche man in der Doctrine Documentation nachlesen kann.

Durch den Einsatz dieser Templates kan man beim Erstellen des DB-Layouts und beim Arbeiten mit dem DatenObjekten viel Zeit sparen, da ein Großteil der Arbeit von Doctrin automatisch gemacht wird.

, , ,

1 Kommentar