![](/img/trans.png)
[英]Querying by nested references values in mongodb / doctrine2 odm
[英]references class “Doctrine\ODM\MongoDB\UnitOfWork” but no such service exists
我目前正在按照此链接的说明使用Symfony 4和Doctrine MongoDB Bundle: DoctrineMongoDBBundle 。 因此,我有一个UserDocument:
src / Document / UserDocument.php
/** @MongoDB\Document(collection="user", repositoryClass="App\Repository\UserRepository") */
class UserDocument
{
/**
* @MongoDB\Id
* @var ObjectId
*/
private $id;
/**
* @MongoDB\Field(type="string", name="first_name")
* @var string
*/
private $firstName;
/**
* @MongoDB\Field(type="string", name="middle_name")
* @var string
*/
private $middleName;
/**
* @MongoDB\Field(type="string", name="last_name")
* @var string
*/
private $lastName;
}
src / Repository / UserRepository.php
use Doctrine\ODM\MongoDB\DocumentRepository;
class UserRepository extends DocumentRepository
{
}
src / Controller / Content.php
类内容扩展Controller
{
/**
* @Route("/content", name="content")
* @param UserRepository $user
* @return Response
*/
public function index(UserRepository $user)
{
$user->findAll();
return new Response();
}
}
因此,运行内容页面后,出现以下错误:
无法自动装配服务“ App \\ Repository \\ UserRepository”:方法“ __construct()”的参数“ $ uow”引用类“ Doctrine \\ ODM \\ MongoDB \\ UnitOfWork”,但不存在此类服务。
DocumentRepository构造函数如下所示:
public function __construct(DocumentManager $dm, UnitOfWork $uow, ClassMetadata $classMetadata)
{
parent::__construct($dm, $uow, $classMetadata);
}
存储库不应该是服务,但如果要保持这种状态,只需自动连接DocumentManager
并从Document Manager中获取uow和classmetadata。
UnitOfWork
和ClassMetadata
无法自动ClassMetadata
在UserRepository
执行类似的UserRepository
,它应该可以工作。
public function __construct(DocumentManager $dm)
{
$uow = $dm->getUnitOfWork();
$classMetaData = $dm->getClassMetadata(User::class);
parent::__construct($dm, $uow, $classMetaData);
}
确保从自动装配中排除存储库类。 此处的示例: https : //symfony.com/doc/current/service_container/3.3-di-changes.html
如果您希望将存储库类作为服务,则应使用工厂服务来进行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.