【发布时间】: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