如何解决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中,但它始终是两种方法之一返回空值。
解决方法
我认为您忘记了注释中的mappedBy
和inversedBy
参数。请参阅文档:https://www.doctrine-project.org/projects/doctrine-mongodb-odm/en/2.1/reference/bidirectional-references.html#one-to-one
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。