使用MongoDB使用ORM和FOSMessageBundle的FOSUserBundle

时间:2015-03-17 10:18:42

标签: mongodb symfony orm fosuserbundle odm

我需要使用ORM数据库实现FOSUserBundle,使用MongoDB(ODM数据库)实现FOSMessageBundle。它可以吗?

我使用ORM配置FOSUserBundle并且有效。

我正在试图使用文档https://github.com/FriendsOfSymfony/FOSMessageBundle/blob/master/Resources/doc/01b-odm-models.md来配置FOSMessageBundle它出现的问题:

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

我没有Acme \ UserBundle \ Document \ User,我有Acme \ UserBundle \ Entity \ User。

如果我把Acme \ UserBundle \ Entity \ User不起作用。

我尝试使用http://doctrine-mongodb-odm.readthedocs.org/en/latest/cookbook/blending-orm-and-mongodb-odm.html,但我需要帮助。

另一种选择是在MongoDB中创建一个重复的User表,但我不知道如何做到这一点。

感谢您的解决方案Nawdal Serrar。

我阅读了文档并尝试了这一点。不要工作,能帮帮我吗?

Message.php

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

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

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


    /**
     * @Gedmo\ReferenceMany(type="entity", class="xxx\WebBundle\Entity\usuarios", mappedBy="senderMongo")
     */
    protected $sender;


    public function __construct()
    {
        $this->metadata = new \Doctrine\Common\Collections\ArrayCollection();
        $this->createdAt = new \DateTime();
    }

}

MessageMetadata.php

/**
 * @ODM\EmbeddedDocument
 */
class MessageMetadata extends BaseMessageMetadata
{
    /**
     * @Gedmo\ReferenceMany(type="entity", class="xxx\WebBundle\Entity\usuarios", mappedBy="participantMesssageMongo")
     */
    protected $participant;



}

Thread.class

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

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

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

    /**
     * @Gedmo\ReferenceMany(type="entity", class="xxx\WebBundle\Entity\usuarios", mappedBy="participantsMongo")
     */
    protected $participants;


    /**
     * @Gedmo\ReferenceMany(type="entity", class="xxx\WebBundle\Entity\usuarios", mappedBy="createdByMongo")
     */
    protected $createdBy;

}

ThreadMetadata.php

/**
 * @ODM\EmbeddedDocument
 */
class ThreadMetadata extends BaseThreadMetadata
{
    /**
     * @Gedmo\ReferenceMany(type="entity", class="xxx\WebBundle\Entity\usuarios", mappedBy="participantThreatMongo")
     */
    protected $participant;



}

usuarios.php

/**
     * @Gedmo\ReferenceOne(type="document", class="xxx\MensajeriaBundle\Document\Message", inversedBy="sender", identifier="senderId")
     */
    private $senderMongo;

    /**
     * @ORM\Column(type="string", nullable=true)
     */
    private $senderId;

    /**
     * @Gedmo\ReferenceOne(type="document", class="xxx\MensajeriaBundle\Document\MessageMetadata", inversedBy="participant", identifier="participantMessageId")
     */
    private $participantMessageMongo;

    /**
     * @ORM\Column(type="string", nullable=true)
     */
    private $participantMessageId;

    /**
     * @Gedmo\ReferenceOne(type="document", class="xxx\MensajeriaBundle\Document\Thread", inversedBy="participants", identifier="participantsId")
     */
    private $participantsMongo;

    /**
     * @ORM\Column(type="string", nullable=true)
     */
    private $participantsId;

    /**
     * @Gedmo\ReferenceOne(type="document", class="xxx\MensajeriaBundle\Document\Thread", inversedBy="createdBy", identifier="createdById")
     */
    private $createdByMongo;

    /**
     * @ORM\Column(type="string", nullable=true)
     */
    private $createdById;

    /**
     * @Gedmo\ReferenceOne(type="document", class="xxx\MensajeriaBundle\Document\ThreadMetadata", inversedBy="participant", identifier="participantThreadId")
     */
    private $participantThreadMongo;

    /**
     * @ORM\Column(type="string", nullable=true)
     */
    private $participantThreadId;

1 个答案:

答案 0 :(得分:0)

这就是您所需要的,您可以引用ODM和ORM实体https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/references.md

之间的关系