문제

엔티티에서 종속/부모 객체를 검색하는 방법은 어떻게 될까요?

$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 메소드 내부의 $ 도메인 객체를 사용하고 사람 클래스에서 관계 정보를 유지해도 괜찮습니까?

답을 찾고 있었기 때문에 대답하십시오.

도움이 되었습니까?

해결책

보세요 zend_db_table 관계. 그들은 정확히 그 일을 할 수 있습니다. 당신은 그냥 사용할 수 있습니다 Zend_Db_Table 오늘, 자신의 구현을 시도하는 대신 Zend Framework의 공부를 할 수 있습니다. 암호 그들의 디자인 결정을 위해 질문에 대해 이야기합니다. 그것은 꽤 권위있는 출처입니다.

다른 팁

먼저 질문의 제목이 분명하지 않다고 생각합니다.

게시물에는 5 가지 질문이 포함 된 것 같습니다 (제가 말할 수있는 경우) :

  1. 엔티티에서 종속/부모 객체를 검색하는 방법은 무엇입니까?
  2. ~이다 $person->getAddress() 데이터베이스에서 사람의 주소 개체를 검색하는 좋은 방법은 무엇입니까?
  3. 이것이 좋은 방법이라면 코드는 어떻게 생겼습니까?
  4. getAddress 메소드 내부에서 $ 도메인 객체를 사용해도 괜찮습니까?
  5. 사람 수업에서 관계 정보를 유지해도 괜찮습니까?

답변하는 한 :

  1. 이 경우 $person->getAddress() 좋은 선택 인 것 같습니다. ;-)
  2. 문제가 보이지 않습니다 : 사람 a 주소, 당신이 그 사람의 대상을 물어 보도록하기 위해 IS를 물어보십시오.
  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;
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top