我正在努力寻找产生恩赐的最佳方式,这就是我现在正在做的事情。
我通过这样的映射器和保湿器创建一个实体:
namespace Event\Model\Mapper;
use ZfcBase\Mapper\AbstractDbMapper;
class Event extends AbstractDbMapper
{
protected $tableName = 'events';
public function findEventById($id)
{
$id = (int) $id;
$select = $this->getSelect($this->tableName)
->where(array('event_index' => $id));
$eventEntity = $this->select($select)->current();
if($eventEntity){
//Set Location Object
$locationMapper = $this->getServiceLocator()->get('location_mapper');
$locationEntity = $locationMapper->findlocationById($eventEntity->getLocationIndex());
$eventEntity->setLocationIndex($locationEntity);
//Set User Object
$userMapper = $this->getServiceLocator()->get('user_mapper');
$userEntity = $userMapper->findUserById($eventEntity->getEnteredBy());
$eventEntity->setEnteredBy($userEntity);
//Set Catalog Object
$catalogMapper = $this->getServiceLocator()->get('catalog_mapper');
$catalogEntity = $catalogMapper->findCatalogById($eventEntity->getCatalogIndex());
$eventEntity->setCatalogIndex($catalogEntity);
}
return $eventEntity;
}
}
现在这种方法的问题在于,当我打电话让我们说用户实体时,这个实体有其他实体附加到它,所以当我通过插入用户实体生成Event实体时,我的Event实体变得非常庞大和笨重,我不我希望我只想要“老年学树”的第一层。
所以我正在考虑创建一个EventEntityFactory,我可以将Event enity的子实体绑定在一起,我打算为此做一个工厂。
有更好的方法吗?
由于
答案 0 :(得分:1)
一种方法是使用虚拟代理(延迟加载):
http://phpmaster.com/intro-to-virtual-proxies-1/
http://phpmaster.com/intro-to-virtual-proxies-2/
基本上,您将生成实体,并使用轻量级代理对象替换任何相关实体。此对象仅在需要时通过延迟加载加载相关实体。
我已经多次使用这种方法和Datamapper设计模式,并且效果非常好。