mongodb - 在 symfony2 中使用 doctrine 扩展在 doctrine2 odm 和 orm 之间共享对象

标签 mongodb symfony doctrine-orm doctrine-extensions stofdoctrineextensions

在我的项目中,我需要在 orm 和 odm 之间共享对象。我有一个实体“变体”和一个文档“跟踪”。一种变体可以容纳许多跟踪事件。我试图通过使用 symfony 2.3 的 stofdoctrineextensionbundle 的学说扩展引用来解决它,但无论我做什么都行不通。也许你们中有人有想法。

跟踪文档:(注意 $variation)

namespace Anchorbrands\Bundle\LandingpageBundle\Document;

use Anchorbrands\Bundle\LandingpageBundle\AnchorbrandsLandingpageBundle;
use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;


/**
 * @ODM\Document(collection="landingpage_tracking")
 */
class Tracking {

    /**
     * @Gedmo\ReferenceOne(type="entity", class="Anchorbrands\Bundle\LandingpageBundle\Entity\Variation", inversedBy="trackingEvents", identifier="variationId")
     */
    protected $variation;

    protected $variationId;

    public function setVariationId($variationId)
    {
        $this->variationId = $variationId;
    }

    public function getVariationId()
    {
        return $this->variationId;
    }

变体实体(注意 $trackingEvents)

/**
 * Variation
 *
 * @ORM\Table(name="landingpage_variation")
 * @ORM\Entity
 */
class Variation
{

/**
 * @Gedmo\ReferenceMany(type="document", class="Anchorbrands\Bundle\LandingpageBundle\Document\Tracking", mappedBy="variation")
 */
protected $trackingEvents;


public function getTrackingEvents()
{
    return $this->trackingEvents;
}

public function setTrackingEvents(Collection $trackingEvents)
{
    $this->trackingEvents = $trackingEvents;
}

最佳答案

解决循环引用问题(除非你可以使用 DI 解决它)@see stof's bundle

<?php

namespace ACME\CoreBundle\Listener;

use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Class ReferencesListener
 *
 * @package ACME\CoreBundle\Listener
 */
class ReferencesListener extends \Gedmo\References\ReferencesListener
{
    /**
     * @var \Symfony\Component\DependencyInjection\ContainerInterface
     */
    private $container;
    /**
     * @var array
     */
    protected $managers
        = [
            'document' => 'doctrine.odm.mongodb.document_manager',
            'entity'   => 'doctrine.orm.default_entity_manager'
        ];

    /**
     * @param ContainerInterface $container
     * @param array              $managers
     */
    public function __construct(ContainerInterface $container, array $managers = array())
    {
        $this->container = $container;
        parent::__construct($managers);
    }

    /**
     * @param $type
     *
     * @return object
     */
    public function getManager($type)
    {
        return $this->container->get($this->managers[$type]);
    }
} 

监听器定义

acme.listener.reference:
       class: ACME\CoreBundle\Listener\ReferencesListener
       arguments: ["@service_container"]
       tags:
           - { name: doctrine.event_subscriber, connection: default }

关于mongodb - 在 symfony2 中使用 doctrine 扩展在 doctrine2 odm 和 orm 之间共享对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17296659/

相关文章:

mysql - 结合mongodb和mysql数据进行查看

mysql - "1064 You have an error in your SQL"尝试使用 Symfony2 和 Doctrine2 执行 INSERT

forms - 如何在 Symfony2 中动态添加验证器?

php - 为联合学说 2 集合实现 setter/getter

php - Doctrine2 - (如何)获取与 main 相关的对象

java - MongoDB 连接问题

c - valgrind - 使用 C api 连接到 mongodb 而不会导致 SIGSEGV

mongodb - Robomongo 0.8.5 的数据库中未显示集合

symfony - TWIG:带有变量的字符串翻译?

forms - Symfony2 表单中的非空白文件输入字段