2013-07-27 2 views
3

나는 다음과 같은 모델링해야 PHP 클래스 구현하려는 : (심포니, DoctrineMongoDBBundle)Doctrine MongoDB에서 서브 문서에 주석을 달려면?

Notification Collection { from { id , fname } , to , sentDate } 

Member Collection { id , fname , lname , email , phone , regDate , ... } 

을 그리고 난 ODM에게 전하고 싶은 : "필드에서 단지 2 값을 유지하는 객체, 보낸 사람의 ID가 그의 성명은 "

내가 사용해야하는 주석은 무엇입니까? from.php와 같은 다른 클래스를 정의해야합니까? 아니면 내가 다음과 같은 두 개의 클래스를 만들 수 있습니다

/* 
*@Document 
*/ 
class Notification { 
/* 
*@Id 
*/ 
protected $id; 

/* 
*@EmbedOne(targetDocument="Member") 
*/ 
protected $from; 

/* 
*@ReferenceOne(targetDocument="Member") 
*/ 
protected $to; 

/* 
*@Date 
*/ 
protected $sentDate; 
} 


/* 
*@Document 
*/ 
class Member { 
/* 
*@Id 
*/ 
protected $id; 

/* 
*@String 
*/ 
protected $fname; 

/* 
*@String 
*/ 
protected $lname; 

/* 
*@String 
*/ 
protected $email; 

. 
. 
. 
} 

그것을 내가 회원 객체에서만 ID와 FNAME를 개최 필드 "에서"제어 할 수있는 방법을 내 컨트롤러에 올바른 있다면? 이 있다고 가정 :

$senderUser; 
$newNotification = new Notification(); 
$newNotification->setFrom($senderUser); 

는 그 다음 Member.But에 대한 모든 정보를 보유 회원 객체 세트에서 $ newNotification-> 내가 계속에만 ID와 보낸 사람의 FNAME을 원한다! (내 프로젝트가 필요하기 때문에) 영어 문법 오류를 용서하십시오. 어떤 도움 덕분에 ...

+0

이 경우 참조를 사용해야합니다. –

+0

Thanks @Pazi. From 필드에서 EmbedOne을 사용하면 어떻게됩니까? 그리고 Member 인스턴스를 만들 때 원하는 필드 만 지정합니다. –

답변

0

당신이 from 필드에 통지의 원래 사용자 ID와 이름을 중첩 주장하는 경우에, 당신은 다시 다음과 같은 필드가 문서에서을에 Embed One 관계가 필요합니다 :

  • id : 회원 문서와의 관계는 Reference One이어야합니다. 참조 용으로 simple 옵션을 사용하여 DBRef 개체가 아니라 구성원 ID 값만 저장하도록 제안합니다.
  • fname : 문자열 필드 여야합니다. ODM에는 참조 된 회원 문서와 최신 내용을 유지할 수있는 기능이 없으므로 직접 확인해야합니다.

개인적으로 알림 문서가 작아서 알림에 직접 fromMemberfromMemberFirstName 개의 필드를 직접 작성하는 것 같습니다. 그런 다음 전달 된 구성원 인수에서 fromMemberFirstName 필드를 설정하는 setFromMember() 메서드에서 일부 논리를 추가 할 수 있습니다.

추가 작업을 수행하려는 경우 events을 사용하여 변경된 fname 필드의 구성원 개체를 모니터링하고 쿼리 문서를 업데이트하는 쿼리를 실행할 수 있지만 별도의 대화입니다.

+0

그레이트 ... 맞아! tnx @jmikola –

관련 문제