如果要插入实体,请执行以下操作:
$user = new User();
$user->setEmail('john@doe.com');
$em->persist($user);
$em->flush();
但是如果我想创建一个可以拥有一个用户的文章呢?
目前,我需要这样做:
$user = $em->getRepository('User')->find($id);
$article->setUser($user);
这是因为关系,Doctrine 2要求用户实体。
但是,我无法“模拟”User对象,因为我不希望手动设置id,因此我无法做到:
$user = new User();
$user->setId(45);
我对这种行为不以为然,你怎么办?
加载User实体只是为了设置关系,即使使用缓存也是一种性能问题,而缓存并不总是一种选择,尤其是对于更新。
答案 0 :(得分:10)
如果您没有方便管理的用户实体,您想要的是reference proxy,EM很乐意为您提供:
<?php
$article = new Entity\Article();
$article->setTitle('Reference Proxies Rule');
$article->setBody('...');
$article->setUser($em->getReference('Entity\User',45));
$em->persist($article);
$em->flush();
答案 1 :(得分:-1)
为什么您的文章要求用户首先拥有ID?您应该能够在没有EntityManager的情况下对您的实体进行单元测试,如果您不能,那么您可能可能做错了什么。然后当你进行功能单元测试时,它就是simple as this。
我建议您观看Zend Casts的Unit Testing Doctrine 2 Entities。