5

이 작업을 수행 :Doctrine 2에서 엔티티 관계를 어떻게 사용합니까? 당신이 엔티티를 삽입 할 때

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

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

하지만 한 사용자가 할 수있는 문서를 만들려면 무엇을;

현재, 내가 수행해야합니다

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

이 때문에 관계이다는 교리 2는 사용자 개체를 요청합니다. 나는 ID 그러므로 내가 을 할 수 없어, 수동으로 설정할 수 싶지 않기 때문에

그러나, 나는 없다 "모의"는 사용자 개체 수 있습니다

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

이것에 대해 내가 잘못 행동, 어떻게하니?

캐시를 사용하여 관계를 설정하기 만하면 사용자 엔티티를로드하는 것이 성능상의 문제가 될 수 있습니다. 캐시는 항상 옵션 일 수는 없습니다.

답변

10

이, 당신이 원하는 것은 EM 당신을 제공해 드릴 것입니다 reference proxy입니다 :

<?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

굉장하고, 고마워요. (다시!) – JohnT

+0

롤 팀, 다시 말하면이 애매한'getReference()'함수는 요일을 저장합니다. BTW - 당신의 코드'$ em()'에 오타가 있습니다. – Cobby

+0

@Cobby - 분명히 문서화되어 있지만 종종 간과되는 기능인 것 같습니다. 어쨌든 에 적합한 사용 사례를 찾은 것일 수 있습니다. typofix 주셔서 감사합니다. – timdev

-1

귀하의 조항에 따라 사용자가 처음에 ID를 요구하는 이유는 무엇입니까? EntityManager없이 엔티티 테스트를 할 수 있어야합니다. 그렇다면 일 수 있습니다. 아마도 일을 잘못하고있을 수 있습니다. 그런 다음 기능 단위 테스트를 수행하면 simple as this입니다.

Zend Casts에서 Unit Testing Doctrine 2 Entities을 시청하는 것이 좋습니다. 당신이 편리하게 관리되는 사용자 개체가없는 경우

+1

음을, 즉, 문제가되지 않습니다 중 기존 사용자 또는 기존 사용자로 내 기사를 업데이트하고 싶지 않다면 먼저 User 엔터티를 가져와야합니다. 그렇지 않으면 Doctrine2가 내 사용자에게 ID가없는 경우 어떻게 알 수 있습니까? 제 조항은 절대적으로 유효한 사용자 일 필요는 없습니다. 나는 엔티티가 자신의 id를 설정하여 사용자 객체를 모의하도록 허용 할 수 없다는 것을 말하고있다. – JohnT

+0

Btw, 링크 감사하지만이 스크린 캐스트를 이미 알고 있지만 Entities Unit Testing과 관련하여 도움이되지 않았습니다. – JohnT

관련 문제