2011-09-14 92 views
0

我有一个模型“事件”(Zend_Db_Table_Abstract),它与其他模型有各种关系。通常我想我会做这样的事情找到它和它的关系:找到(1234)包括关系

$events = new Events(); 
$event = $events->find($id)->current(); 
$eventsRelationship1 = $event->findDependentRowset('Relationship1'); 

由于工作的关系已经建立,我想知道是否有任何形式的自动联接提供什么。每次我拿到我的活动,我都需要拥有所有的关系。目前我看到只有两种方法可以实现这一点:

  1. 自己构建查询,硬编码。不要这样,因为它正在解决已经建立的关系和“模型方法的便利性”。
  2. 使用单个查询获取每个相关对象。这个也很丑陋,因为我不得不触发太多的查询。

当考虑获取一组多行时,这甚至更进一步。对于单个事件,我可能会多次查询数据库,但是当获取100行联接时只是基本的。

那么,有没有人知道通过使用这些关系来创建连接的方法,或者除了硬编码查询之外没有别的办法吗?

在此先感谢

阿恩

回答

1

解决这个难题的办法就是“升级”使用dataMapper模式的数据库访问。

你基本上是在应用程序中的模型和db中的表示之间添加一个额外的层。这个映射器层允许您从不同的表中读取/写入数据 - 而不是一个模型和一个表之间的直接链接。

这里是一个good tutorial要关注。 (有些东西你可以跳过 - 我只用我的代码就把所有的getter和setter都遗漏了)。

当您刚刚使用Zend_Db_Table_Abstract时,需要一点时间才能让您的头部环绕它的工作方式,但它是值得的。

+0

http://www.survivethedeepend.com/zendframeworkbook/en/1.0/implementing.the.domain.model.entries.and.authors是另一个好读物。顺便说一句,这种模式允许你在同一模型中使用不同的源代码(比如我使用数据库后端和tex-backend作为内容,而前端/控制器没有任何区别:) – Fge