如何从实体中检索从属/父对象。
$person->getAddress();
这应该从数据库中检索该人员的Address对象并将其作为对象返回。这是一个很好的方法,如果可以的话,代码应该如何。
这样做意味着对象本身应该知道地址是与之相关的实体/值对象。 为什么我想要这种语法是因为它在表示层看起来很干净。
人员类看起来像这样:
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方法中使用$ domain对象并将关系信息保存在Person类中吗?
请回答,因为我一直在寻找答案。
答案 0 :(得分:3)
看看Zend_Db_Table Relationships。他们可以做到这一点,甚至更多。您今天可以使用Zend_Db_Table
,而不是尝试提供自己的实现,或者您可以根据自己的问题研究Zend Framework的code进行设计决策。这是一个权威的来源。
答案 1 :(得分:2)
首先,我认为问题的标题不是很明确,其次我不是 完全确定我理解被问到的内容......在我看来,标题和帖子都应该进行编辑以便清理一下。
该帖子似乎包含5个问题(如果我可以解释):
$person->getAddress()
是检索a的Address对象的好方法
来自数据库的人?至于答案:
$person->getAddress()
似乎是一个不错的选择,你知道,这是一个很好的描述。 ; - )回答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;
}
}