Doctrine MongoDB ODM

Jonathan Wage, der auch bei der Entwicklung des Doctrine 2 ORM maßgeblich beteiligt ist, hat mit dem Doctrine MongoDB ODM eine Entsprechung für die nicht-relationale MongoDB geschrieben.

Im Gegensatz zu einem ORM wie Doctrine für PHP oder Hibernate für Java werden bei einem ODM Objekte nicht in einem relationalen Datenbankschema gespeichert, sondern als “Dokumente” mit freier Struktur. Einen guten Überblick gibt das ”Getting Started“-Kapitel des Doctrine ODM Cookbooks, das auch als Beispiel die Speicherung von Benutzern und Blog-Einträgen hat:

/** @Document */
class User
{
    /** @Id */
    public $id;

    /** @String */
    public $name;

    /** @String */
    public $email;

    /** @ReferenceMany(targetDocument="BlogPost") */
    public $posts = array();
}

/** @Document */
class BlogPost
{
    /** @Id */
    public $id;

    /** @String */
    public $title;

    /** @String */
    public $body;

    /** @Date */
    public $createdAt;
}

Nachdem in den Annotations der Klassen definiert wurde, wie welche Felder gespeichert wurden, können User und Beiträge ganz einfach angelegt werden:

$user = new User();
$user->name = 'Nico K.';
$user->email = 'nico@example.org';

$dm->persist($user); // Add to Doctrine

$post = new BlogPost();
$post->title = 'Doctrine MongoDB ODM';
$post->body = 'Super Sache!';
$post->createdAt = date('Y-m-d');

$user->posts[] = $post;

$dm->flush(); // Store everything