你如何在Doctrine 2中使用实体关系?

时间:2011-05-15 21:29:38

标签: php lazy-loading entity-relationship doctrine-orm insert-update

如果要插入实体,请执行以下操作:

$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实体只是为了设置关系,即使使用缓存也是一种性能问题,而缓存并不总是一种选择,尤其是对于更新。

2 个答案:

答案 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

相关问题