Concrete classes for Doctrine ODM

September 7, 2016 ยท View on GitHub

This page lists some example implementations of FOSMessageBundle models for the Doctrine MongoDB ODM.

Given the examples below with their namespaces and class names, you need to configure FOSMessageBundle to tell them about these classes.

Add the following to your app/config/config.yml file.

# app/config/config.yml

fos_message:
    db_driver: mongodb
    thread_class: AppBundle\Document\Thread
    message_class: AppBundle\Document\Message

You may have to include the MessageBundle in your Doctrine mapping configuration, along with the bundle containing your custom Thread and Message classes:

# app/config/config.yml

doctrine_mongodb:
    document_managers:
        default:
            mappings:
                FOSMessageBundle: ~

Continue with the installation

Message class

<?php
// src/AppBundle/Document/Message.php

namespace AppBundle\Document;

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
use FOS\MessageBundle\Document\Message as BaseMessage;

/**
 * @MongoDB\Document
 */
class Message extends BaseMessage
{
    /**
     * @MongoDB\Id
     */
    protected $id;

    /**
     * @MongoDB\EmbedMany(targetDocument="AppBundle\Document\MessageMetadata")
     */
    protected $metadata;

    /**
     * @MongoDB\ReferenceOne(targetDocument="AppBundle\Document\Thread")
     */
    protected $thread;

    /**
     * @MongoDB\ReferenceOne(targetDocument="AppBundle\Document\User")
     */
    protected $sender;
}

MessageMetadata class

<?php
// src/AppBundle/Document/MessageMetadata.php

namespace AppBundle\Document;

use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
use FOS\MessageBundle\Document\MessageMetadata as BaseMessageMetadata;

/**
 * @ODM\EmbeddedDocument
 */
class MessageMetadata extends BaseMessageMetadata
{
    /**
     * @ODM\ReferenceOne(targetDocument="AppBundle\Document\User")
     */
    protected $participant;
}

Thread class

<?php
// src/AppBundle/Document/Thread.php

namespace AppBundle\Document;

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
use FOS\MessageBundle\Document\Thread as BaseThread;

/**
 * @MongoDB\Document
 */
class Thread extends BaseThread
{
    /**
     * @MongoDB\Id
     */
    protected $id;

    /**
     * @MongoDB\ReferenceMany(targetDocument="AppBundle\Document\Message")
     */
    protected $messages;

    /**
     * @MongoDB\EmbedMany(targetDocument="AppBundle\Document\ThreadMetadata")
     */
    protected $metadata;

    /**
     * @MongoDB\ReferenceMany(targetDocument="AppBundle\Document\User")
     */
    protected $participants;

    /**
     * @MongoDB\ReferenceOne(targetDocument="AppBundle\Document\User")
     */
    protected $createdBy;
}

ThreadMetadata class

<?php
// src/AppBundle/Document/ThreadMetadata.php

namespace AppBundle\Document;

use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
use FOS\MessageBundle\Document\ThreadMetadata as BaseThreadMetadata;

/**
 * @ODM\EmbeddedDocument
 */
class ThreadMetadata extends BaseThreadMetadata
{
    /**
     * @ODM\ReferenceOne(targetDocument="AppBundle\Document\User")
     */
    protected $participant;
}