2009-09-09 4 views
0

엔티티에서 종속/부모 개체를 검색하는 방법은 무엇입니까?도메인 엔티티 메서드 내에서 종속/부모 검색

$person->getAddress(); 

이렇게하면 해당 사람의 주소 개체가 데이터베이스에서 검색되어 개체로 반환됩니다. 이 작업을 수행하는 좋은 방법이며 코드가 어떻게 보이는지 확인하는 것이 좋습니다.

이렇게하면 개체 자체가 주소가 관련된 개체/값 개체라는 것을 알아야합니다. 프리젠 테이션 레이어에서 깨끗하게 보이기 때문에 이런 종류의 구문을 사용하고 싶습니다.

사람 클래스는 다음과 같이 보일 것이다 :

class Person { 
    protected $_domain = null; // domain is assigned when instantiated 
    protected $_data = array('name', 'address'); 
    protected $_relations = array(
    'address'=>array(
     'class'=>'Address' 
    ) 
); 
    protected $_retrievedRelations = array(); 
    public function getAddress() { 
    if (array_key_exists('address', $this->_relations)) { 
     if (!array_key_exists('address', $this->_retrievedRelations)) { 
     $this->_retrievedRelations['address'] = $this->_domain->getAddress($this->_data['address']); 
     } 

     return $this->_retrievedRelations['address']; 
    } 

    return $this->_data['address']; 
    } 
} 

따라서는 getAddress에 방법 안에 $ 도메인 객체를 사용하고 Person 클래스에 관련 정보를 계속 확인입니까?

나는 답을 찾아 다녔기 때문에 대답 해주십시오.

+0

이반의 대답을 자세히 살펴 봐야한다고 생각합니다. Zend_Db_Table의 관계 부분은 당신이하는 일을 정확히 수행합니다. '$ person-> findAddress()'를 호출하면 다른 클래스 (문서 당)와 관계를 맺을 수 있고 (refrence 규칙의 이름이 "Address"라고 가정) 전화를 걸면 정의 된 규칙과 관련된 키를 주소 도메인에 보낸다. find' 메서드를 호출하고 유효한 행 집합을 반환합니다. Zend_Db_Table을 사용하는 데 이미 익숙하다면, 찾고있는 것과 똑같은 것 같습니다. –

+0

네, 그렇지만 열심히로드하고 있습니까? 또한 테이블 클래스를 만들고 비즈니스 논리를 저장하는 Row 클래스를 만들어야합니다. – andho

답변

3

Zend_Db_Table Relationships를 살펴 보자 (I는 목록 내에서 제대로 작동 할 수 없었다). 그것들은 정확하게 그 일을 할 수 있습니다.자신의 구현을 시도하는 대신 Zend_Db_Table오늘을 사용하거나 Zend Framework의 code을 연구하여 질문에 대한 디자인 결정을 내릴 수 있습니다. 그것은 꽤 권위있는 소식통입니다.

+0

고마워,하지만 잠시 동안 Zend_Db_Table을 사용하여 Outlet PHP 또는 다른 ORM으로 할 수있는 것처럼 도메인을 쉽게 추상화하는 데 도움이되지 않습니다. – andho

+0

Zend_Db_Table andho와 함께하는 길은 무엇입니까? 귀하의 질문은 Zend_Db_Table 기능으로 완전히 덮여 있습니다. 그리고 항상 테이블 하위 클래스에 더 많은 것을 추가 할 수 있습니다. 나는 처음부터 자신의 솔루션을 선택할 가치가 있다고 생각하지 않습니다. –

+0

Ivan에 동의합니다. Zend_Db_Table의 전체 구현에 동의하지는 않지만, 이것이 내 옵션에서 실제로 강조하는 부분 중 하나입니다. –

2

처음에 나는 질문의 제목이 매우 명확하지 않다고 생각한다. 두 번째로 나는 이 무엇인지 완전히 확신하고있다. 내 의견으로는 제목과 게시물 모두 정말로 편집해야한다. 약간 위로. (내가 의역 할 수있는 경우)

포스트는 5 개 질문을 포함 할 것 같다

  1. 어떻게 하나의 엔티티에서 종속/부모 개체를 검색 가겠어요?
  2. 사람의 주소 개체를 데이터베이스에서 검색하는 좋은 방법은 $person->getAddress()입니까?
  3. 이것이 좋은 방법이라면 코드는 어떻게 생겼을까요?
  4. $ domain 개체를 getAddress 메서드 내에서 사용할 수 있습니까?
  5. 관계 정보를 Person 클래스에 보관해도 괜찮습니까?

는 지금까지 답변 가서이 경우 $person->getAddress()에서

  1. 은, 당신이 알고, 좋은 설명 좋은 선택을 보인다. ;-)
  2. 나는 문제가 보이지 않는다 : 사람 안녕하세요, 주소, 그 사람의 개체를 물어 주소.
  3. 주어진 코드 예제는 약간 어수선하기는하지만이 답변에있는 것처럼 보입니다. 나는 단지 멤버 객체의 주소를 만들었을 것이지만, 그 외는 거의 같을 것이다.
  4. & 5. 나는 취향, 우선 순위 및 디자인 의존성과 관련이있다. 이것에 대한 명확한 답변은 없습니다. 또한 여기서 의미론이나 실제 시나리오를 논하는 것입니까?

대답 Nr.3 함께 갈 수있는 일부 코드 :

class Person { 
    protected $_domain = null; // domain is assigned when instantiated 
    protected $_address;  // object 

    public function getAddress() { 
     if (!isset($this->_address)) { 
      $this->_address = $this->_domain->getAddressForPerson($this); // assuming $this contains some sort of ID 
     } 
     return $this->_address; 
    } 
}