我正在使用Zend Framework开发Web应用程序。在documentation它说......
“请注意,表数据网关模式可以成为 限制在较大的系统中。“
答案 0 :(得分:2)
使用Table Data Gateway的缺点是它可以限制您编写复杂查询。自定义查询,例如UNION
,SUB 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的过滤器和规则