5

当您要插入实体时,请执行以下操作:

$user = new User();
$user->setEmail('john@doe.com');

$em->persist($user);
$em->flush();

但是如果我想创建一篇可以有一个用户的文章怎么办?

目前,我需要做:

$user = $em->getRepository('User')->find($id);
$article->setUser($user);

这是因为关系,学说 2 要求一个用户实体。

但是,我不能“模拟”用户对象,因为我不希望手动设置 id,因此我不能这样做

$user = new User();
$user->setId(45);

我对这种行为有错吗,你怎么办?

加载用户实体只是为了设置关系可能是性能问题,即使使用缓存也是如此,这并不总是一个选项,尤其是对于更新。

4

2 回答 2

10

如果您手边没有托管的用户实体,您需要的是参考代理,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();
于 2011-05-15T23:03:00.470 回答
-1

为什么您的文章首先要求用户拥有一个 ID?您应该能够在没有 EntityManager 的情况下对您的实体进行单元测试,如果不能,那么您可能做错了什么。然后,当您进行功能单元测试时,就像这样简单

我建议您观看Zend Casts 的单元测试原则 2 实体

于 2011-05-15T22:17:03.057 回答