5

エンティティを挿入する場合は、次のようにします。

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

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

しかし、1人のユーザーを持つことができる記事を作成したい場合はどうなりますか。

現在、私はする必要があります:

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

これは関係のためであり、Doctrine2はユーザーエンティティを要求します。

ただし、IDを手動で設定したくないため、Userオブジェクトを「モック」することはできません。したがって、次のことはできません

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

私はこの振る舞いについて間違っていますか、どうしますか?

キャッシュを使用している場合でも、関係を設定するためだけにUserエンティティをロードすることはパフォーマンスの問題になる可能性があります。これは、特に更新の場合、常にオプションであるとは限りません。

4

2 に答える 2

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();
于 2011-05-15T23:03:00.470 に答える
-1

なぜあなたの記事はユーザーにそもそもIDを持っていることを要求するのですか?EntityManagerなしでエンティティを単体テストできるはずです。できない場合は、おそらく何か間違ったことをしていることになります。次に、機能ユニットテストを行うときは、これと同じくらい簡単です。

ZendCastsのUnitTestingDoctrine2Entitiesをご覧になることをお勧めします。

于 2011-05-15T22:17:03.057 に答える