我正在使用 Zend Framework 开发 Web 应用程序。在文档中它说...
“请注意,表数据网关模式可能会在更大的系统中受到限制。”
- 使用表数据网关有什么缺点?
- 用 Zend 处理数据库最合适的方法是什么?
我正在使用 Zend Framework 开发 Web 应用程序。在文档中它说...
“请注意,表数据网关模式可能会在更大的系统中受到限制。”
使用表数据网关的缺点是它会限制您编写复杂的查询。自定义查询,例如UNION
,SUB QUERY
以及使用WHERE
子句,例如
WHERE A OR (B AND C) OR D
编写复杂查询的最佳方法是手动编写复杂查询。所以执行它们的最好方法是使用Zend_Db_Adapter
在 ZF2 中有像 Data Mapper 这样的东西(你可以看到这个答案: Data Mapper、Table Data Gateway (Gateway)、Data Access Object (DAO) 和 Repository 模式有什么区别?
但是,如果您使用的是 ZF2,这个问题已经解决了,与数据库通信的最有效方式是 TableGateway 与定义的 ResultSetPrototype(作为具有 exchangeArray 功能的模型之一)和 ofc 槽 Zend/Db/Adapter 类这里是我如何做的示例在 ZF2 中:
在 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);
},
AnyTable 是一种模型(具有操作数据库的功能) Any 是第二种模型,具有关于数据形式 DB 的过滤器和规则