我有一个doctrine实体User和一个文档Address(存储在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()放到doctrine UserRepository类中,并在那里注入必要的文档管理器,以便能够访问Address Document。我已经覆盖了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');
我想过用这样的东西把Repository作为服务:
user.repository:
class: BlaBla\UserBundle\Repository\UserRepository
arguments: [@doctrine.orm.entity_manager, @doctrine.odm.mongo_db.document_manager]
在我的services.yml文件中,但这只允许我使用以下命令访问存储库:
$this->get('user.repository');
默认快捷方式仍无效。
请帮助找到解决此问题的正确方法。
感谢。
答案 0 :(得分:0)
您在哪里指定了UserRepository?在带有注释的User.php中?也许这是唯一缺少的东西。 但是如果你想使用实体和文档存储库,我建议你使用Doctrine扩展,特别是Reference。