当前位置: 首页 > 知识库问答 >
问题:

引用类"Doctrine\ODM\MongoDB\UnitOfWork"但不存在这样的服务

慕容齐智
2023-03-14

我目前正在使用Symfony 4和Doctrine MongoDB捆绑包,遵循此链接中的说明:DoctrineMongoDBBundle。因此,我有一个用户文档:

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

类内容扩展控制器

{

    /**
     * @Route("/content", name="content")
     * @param UserRepository $user
     * @return Response
     */
    public function index(UserRepository $user)
    {
        $user->findAll();
        return new Response();
    }


}

所以,在运行内容页面后,我得到了以下错误:

无法自动连线服务“App\Repository\UserRepository”:方法“\uu construct()”的参数“$uow”引用类“Doctrine\ODM\MongoDB\UnitOfWork”,但不存在此类服务。

DocumentRepository构造函数如下所示:

public function __construct(DocumentManager $dm, UnitOfWork $uow, ClassMetadata $classMetadata)
    {
        parent::__construct($dm, $uow, $classMetadata);
    }

共有2个答案

哈宪
2023-03-14

确保从自动关联中排除存储库类。示例如下:https://symfony.com/doc/current/service_container/3.3-di-changes.html

如果您希望将存储库类作为服务,您应该使用factory服务来完成。

傅志用
2023-03-14

存储库不应该是服务,但如果您想保持这种方式,只需自动连接DocumentManager,并从DocumentManager获取uow和classmetdata。

UnitOfWorkClassMetadata不能自动生成

UserRepository中执行类似操作,应该可以正常工作。

public function __construct(DocumentManager $dm)
{
    $uow = $dm->getUnitOfWork();
    $classMetaData = $dm->getClassMetadata(User::class);
    parent::__construct($dm, $uow, $classMetaData);
}
 类似资料:
  • 我正在将一个项目从Symfony 3升级到Symfony 4(https://github.com/symfony/symfony/blob/master/UPGRADE-4.0.md),我有很多这样的存储库/服务: 当我尝试在浏览器中这样运行项目时: 我得到这个错误: 这是否意味着您必须在services.yaml文件中为“条令\ORM\Mapping\ClassMetadata”创建服务? 由

  • 我在尝试使用JAXB封送时遇到以下异常。 以下是堆栈跟踪: 键入AORAGENT2TTWSREQUEST。JAVA 我参考了下面的链接,仍然不知道到底是什么问题: JAXB非法注释例外

  • 我一直在尝试使用跨dbms数据库的迁移。使用entrust和confide包,我在它们之后添加了迁移,以添加user _ statuses表和users表中对用户状态id的引用;但是当我定义外键时,我得到了这个: 下面是user_ Status和变更迁移。user_status创建: 用户变更:

  • 我目前能够编译一个具有以下import语句的类:

  • 有没有想过为什么使用Dociety的ODM会在同一个查询上返回零结果? 更新#1看起来教义\MongoDB\Query\Builder::near()L363有问题。方法参数忽略第二个值($Y)。因此只传递要执行的第一个值。

  • ODM

    ODM 是用于处理无人机图像的开源命令行工具包。ODM 将简单的 2D 图像变成: 分类点云 3D 纹理模型 地理参考的正射校正影像 地理参考的数字高程模型 该应用程序可用于 Windows、Mac 和 Linux,它可以从命令行运行,非常适合高级用户、脚本以及与其他软件集成。 快速开始 运行 ODM 的最简单方法是通过 docker。要安装 docker,请参阅 docs.docker.com。