您如何在教义 2 中使用实体关系


How do you work with Entity relationship within Doctrine 2?

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

$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);

我这种行为是不是错了,你怎么做?

加载 User 实体只是为了设置关系(即使使用缓存)可能很重要,这并不总是一个选项,尤其是对于更新。

如果您手边没有托管用户实体,则需要一个引用代理,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();

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

我建议你观看 Zend Cast 的单元测试原则 2 实体。