Symfony 4 MongoDB ODM一对一关系不起作用

问题描述

我在一对一关系中遇到symfony和mongoDB odm错误 例如,我有一个拥有Work的用户。

用户类别:

/**
 * @MongoDB\Document
 * @MongoDBUnique(fields="email")
 */
class User implements UserInterface
{
    /**
     * @MongoDB\Id
     */
    private $id;

    /**
     * @MongoDB\Field(type="string")
     */
    private $firstName;

    /**
     * @MongoDB\Field(type="string")
     */
    private $lastName;

    /**
     * @MongoDB\Field(type="string")
     * @Assert\NotBlank()
     * @Assert\Email()
     */
    private $email;


    /**
     * @MongoDB\ReferenceOne(targetDocument=Work::class)
     */
    private $work;
    //getter setter

工作班:

class Work
{
    /**
     * @MongoDB\Id()
     */
    private $id;

    /**
     * @MongoDB\ReferenceOne(targetDocument=User::class)
     */
    private $user;


   //getter setter

}

控制器:

class TestingController extends AbstractController
{
    /**
     * @Route("/testing",name="testing")
     * @param DocumentManager $documentManager
     * @return Response
     * @throws MongoDBException
     */
    public function index(DocumentManager $documentManager)
    {
        $user = new User();
        $user->setFirstName('test1');
        $user->setLastName('test2');
        $user->setEmail('test123@gmail.com');


        $documentManager->persist($user);

        $work= new Work();
        $work->setUser($user);

        $documentManager->persist($work);
        $documentManager->flush();

        return new Response("test");
    }

    /**
     * @Route("/test",name="test")
     * @param DocumentManager $documentManager
     * @return Response
     */
    public function test(DocumentManager $documentManager){
        $user = $documentManager->getRepository(User::class)->findAll();
        dump($user);

        return new Response("test test");
    }
}

因此,我创建了2个类,一个作为具有一项工作的用户,创建了user,然后创建了工作,并从工作类中分配了该用户。 在MongoDB指南针中,我在“工作”集合下找到了该用户的参考。

现在在控制器的测试方法中,我尝试查找用户并转储数据。 问题是每当我想找到$ user-> getWork()时,当用户存在时,我会得到一个空值。但是反演很好。每当我尝试$ work-> getUser()时,我都可以找到用户。

我的代码有什么问题吗?我想同时使用两种方法:$ user-> getWork()和$ work-> getUser(), 我曾尝试将其添加到ReferenceOne MapdBy和inversedBy中,但它始终是两种方法之一返回空值。

解决方法

我认为您忘记了注释中的mappedByinversedBy参数。请参阅文档:https://www.doctrine-project.org/projects/doctrine-mongodb-odm/en/2.1/reference/bidirectional-references.html#one-to-one

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...