0

我的组织模型中有以下功能。

public function getOrganisations($where=null,$order='name ASC',$offset=null,$limit=null){
            $Result = $this->fetchAll($where,$order,$limit,$offset);
            if (!$Result){
                return array();
            }

            return $Result->toArray();
        }

但是如何包含我的 organization_types 模型,以便我可以在组织表中加入到 organization_type_id ?

4

2 回答 2

1

这是支持使用数据映射器模式的论点的核心。
使用您在示例中似乎使用的结构,尝试将organisation_types对象传递到Organisation模型中会遇到很大的麻烦。但是,您可以在查询中执行连接以连接到organisation_types表,但连接对象不太可能是合理的。

加入organization_types 表

//assuming this is a DbTable model that extends Zend_Db_Table_Abstract
 function getOrganisations($where=null,$order='name ASC',$offset=null,$limit=null){
     $select = $this->select()->setIntegrityCheck(FALSE);//This locks the table to allow joins
     $select->joinLeft('organisation_types', 'organisation_types.id = organisation.organisation_type_id');//This will join the tables with all feilds, use the join type you like.
     if (!is_null($where) {
         $select->where($where);
     }
     if (!is_null($order) {
         $select->order($order);
     }
     if (!is_null($offset) {
         $select->limit(null,$offset);//offset is second arg in limit() in select()
     }
     if (!is_null($limit) {
         $select->limit($limit);
     }
       $Result = $this->fetchAll($select);
       if (!$Result){
            return array();
       }

       return $Result->toArray();
 }

这应该让您了解表连接的工作方式。如果您想使用这些对象,您需要使用不同的结构重新开始。
我在 PHPMaster 上找到了一些很好的教程,它们帮助我了解数据映射器和域模型。

构建领域模型,介绍
集成数据映射器

此外,在线书籍Survive The Deepend有一个很好的数据映射器模式示例以及如何测试它。

祝你好运...

于 2012-07-09T05:50:26.437 回答
0

也许使用Zend_Db_SelectwithjoinLeft()会更合适:

http://framework.zend.com/manual/en/zend.db.select.html#zend.db.select.building.join

于 2012-07-09T05:09:12.320 回答