Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you work with Entity relationship within Doctrine 2?

When you want to insert an Entity you do this:

$user = new User();
$user->setEmail('[email protected]');

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

But what if I want to create an article which can have one User;

Currently, I need to do:

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

This is because of the relationship, Doctrine 2 asks for an User entity.

However, I can't "mock" an User object, because I don't want the id be set manually, therefore I can't do:

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

Am I wrong about this behavior, how do you do?

It can be performance matter to load the User entity just to set the relationship, even with a cache, which cannot be always an option, especially for an update.

like image 665
JohnT Avatar asked May 15 '11 21:05

JohnT


1 Answers

If you don't have a managed User entity handy, what you want is a reference proxy, which the EM will be happy to give you:

<?php
$article = new Entity\Article();
$article->setTitle('Reference Proxies Rule');
$article->setBody('...');
$article->setUser($em->getReference('Entity\User',45));
$em->persist($article);
$em->flush();
like image 143
timdev Avatar answered Nov 09 '22 09:11

timdev