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

Joh*_*hnT 5 php entity-relationship lazy-loading insert-update doctrine-orm

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

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

$em->persist($user);
$em->flush();
Run Code Online (Sandbox Code Playgroud)

但是,如果我想创建一个可以拥有一个用户的文章呢?

目前,我需要这样做:

$user = $em->getRepository('User')->find($id);
$article->setUser($user);
Run Code Online (Sandbox Code Playgroud)

这是因为关系,Doctrine 2要求用户实体.

但是,我不能"模拟"一个User对象,因为我不希望手动设置id,因此我不能这样做:

$user = new User();
$user->setId(45);
Run Code Online (Sandbox Code Playgroud)

我错了这个行为,你怎么办?

加载User实体只是为了设置关系,即使使用缓存也是一种性能问题,而缓存并不总是一种选择,特别是对于更新.

tim*_*dev 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();
Run Code Online (Sandbox Code Playgroud)