【问题标题】:How to access to Doctrine Document Manager from Doctrine Entity Repository如何从 Doctrine Entity Repository 访问 Doctrine Document Manager
【发布时间】:2014-06-18 08:29:41
【问题描述】:

我有一个学说实体用户和一个文档地址(存储在 mongoDB 中)。我想通过 userId 属性在它们之间设置一对多的关系。 (用户有很多地址)

我的用户实体:

namespace BlaBla\UserBundle\Entity;

use Doctrine\ORM\Mapping as ORM;


/**
 * @var integer
 */
private $id;

/**
 * @var string
 */
private $firstName;

...等等

我的地址文件:

namespace BlaBla\UserBundle\Document;
/**
 * BlaBla\UserBundle\Document\Address
 */
class Address
{
/**
 * @var MongoId $id
 */
protected $id;

/**
 * @var string $firstName
 */
protected $firstName;

/**
 * @var string $lastName
 */
protected $lastName;

/**
 * @var int $userId
 */
protected $userId;

...等等

我的目标是为 Address 对象创建 getUser() 方法,为 User 对象创建 getAddresses() 方法。

我决定将 getAddresses() 方法放置到原则 UserRepository 类中,并在那里注入必要的文档管理器,以便能够访问地址文档。我已经覆盖了 userRepository 的构造函数并将必要的文档管理器对象传递给它。

请查看 UserRepository 类:

<?php

namespace BlaBla\UserBundle\Repository;

use Doctrine\ORM\EntityRepository;

class UserRepository extends EntityRepository
{
/**
 * @var \Doctrine\ODM\MongoDB\DocumentManager
 */
private $_dm;

/**
 * @param \Doctrine\ORM\EntityManager $dm
 */
public function __construct(\Doctrine\ORM\EntityManager $em, $dm) {

    $metaData = new \Doctrine\ORM\Mapping\ClassMetadata('BlaBla\UserBundle\Entity\User');
    parent::__construct($em, $metaData);
    $this->_dm = $dm;
}

/**
 * @param $user_id integer
 * @return \BlaBla\UserBundle\Document\Address
 */
public function getAddress($user_id) {
    $address = $this->_dm->getRepository('BlaBlaUserBundle:Address');
    $rt = $address->findByUserId($user_id);
    return $rt;
}

public function getAllUsers()
{
    return $this->findAll();
}
}

在此之后,我可以通过以下方式从我的控制器访问存储库:

    $em = $this->getDoctrine()->getManager();
    $dm = $this->get('doctrine_mongodb')->getManager();
    $t = new \BlaBla\UserBundle\Repository\UserRepository($em, $dm);
    var_dump($t->getAddress($id));
    var_dump($t->getAllUsers());

这两种方法都可以正常工作,但现在我无法使用以下快捷方式访问存储库:

 $user = $this->getDoctrine()->getRepository('BlaBlaUserBundle:User');

我考虑过使用这样的方式将存储库作为服务:

user.repository:
   class: BlaBla\UserBundle\Repository\UserRepository
   arguments: [@doctrine.orm.entity_manager, @doctrine.odm.mongo_db.document_manager]

在我的 services.yml 文件中,但这只能让我通过以下方式访问存储库:

$this->get('user.repository'); 

默认快捷方式仍然无法使用。

请帮助找到解决此问题的正确方法。

谢谢。

【问题讨论】:

    标签: symfony doctrine-orm doctrine-odm


    【解决方案1】:

    您在哪里指定了 UserRepository?在带有注释的 User.php 中?也许这是唯一缺少的东西。 但是如果你想使用实体和文档存储库,我建议你使用 Doctrine 扩展,特别是Reference

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-10
      • 2017-03-27
      • 2015-01-25
      • 1970-01-01
      • 1970-01-01
      • 2013-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多