Как вы работаете с отношениями сущностей в Doctrine 2? - PullRequest
5 голосов
/ 16 мая 2011

Когда вы хотите вставить сущность, вы делаете это:

$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.

Однако я не могу "насмехаться" над объектом User, потому что не хочуИдентификатор может быть установлен вручную, поэтому я не могу сделать :

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

Я ошибаюсь в этом поведении, как вы делаете?

Производительность может быть связана с загрузкой объекта User только для установки отношения, даже с кешем, что не всегда может быть вариантом, особенно для обновления.

Ответы [ 2 ]

10 голосов
/ 16 мая 2011

Если у вас нет удобной управляемой сущности пользователя, вам нужен справочный прокси , который 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();
0 голосов
/ 16 мая 2011

Почему ваша статья требует от пользователя иметь идентификатор в первую очередь?Вы должны иметь возможность модульного тестирования ваших сущностей без EntityManager, если вы не можете, то вы , вероятно, делаете что-то не так.Затем, когда вы выполняете функциональные модульные тесты, это просто просто, как это .

Я рекомендую вам посмотреть сущности модульного тестирования 2 сущности от Zend Casts.

...