在Zend Framework中使用数据库最合适的方法是什么?

时间:2013-08-26 09:58:05

标签: php zend-framework zend-framework2 zend-db zend-db-table

我正在使用Zend Framework开发Web应用程序。在documentation它说......

  

“请注意,表数据网关模式可以成为   限制在较大的系统中。“

  • 使用表数据网关有什么缺点?
  • 最重要的是什么 用Zend处理数据库的合适方法?

2 个答案:

答案 0 :(得分:2)

使用Table Data Gateway的缺点是它可以限制您编写复杂查询。自定义查询,例如UNIONSUB QUERY以及使用WHERE条款,例如

 WHERE A OR (B AND C) OR D

编写复杂查询的最佳方法是手动编写复杂查询。因此,执行它们的最佳方法是使用Zend_Db_Adapter

答案 1 :(得分:2)

在ZF2中有像Data Mapper这样的东西(你可以看到这个答案:What is the difference between the Data Mapper, Table Data Gateway (Gateway), Data Access Object (DAO) and Repository patterns?

但是如果你正在使用ZF2这个问题已经解决了问题,与数据库通信最有效的方法是使用定义的ResultSetPrototype(作为具有exchangeArray函数的模型之一)的TableGateway,并且通过Zend / Db / Adapter类来获取示例如何我在ZF2中这样做:

IN SERVICE.CONFIG:

'Gallery\Model\AnythingListTable' =>  function($sm) {
        $tableGateway = $sm->get('AnythingListTableGateway');
        $table = new AnythingListTable($tableGateway);
        return $table;
    },
    'AnythingListTableGateway' => function ($sm) {
        $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
        $resultSetPrototype = new ResultSet();
        $resultSetPrototype->setArrayObjectPrototype(new Anything());
        return new TableGateway('Anything', $dbAdapter, null, $resultSetPrototype);
    },

AnythingTable是一个模型(具有操作数据库的功能) 任何东西都是第二个模型,包含有关数据格式DB的过滤器和规则