Php Zend_Db_表联接查询与数据库视图
我想知道在访问数据库数据时实现一致性的最佳做法和最佳方式是什么: 目前的结构如下Php Zend_Db_表联接查询与数据库视图,php,zend-framework,coding-style,zend-db,zend-db-table,Php,Zend Framework,Coding Style,Zend Db,Zend Db Table,我想知道在访问数据库数据时实现一致性的最佳做法和最佳方式是什么: 目前的结构如下 Data Access --> Business Logic --> Controller --> View 我的数据访问层由每个表的Zend_Db_表、Zend_Db_表行集和Zend_Db_表行组成 我的业务逻辑存储在基于表 问题查询示例: 我想根据他的用户名获得一个特定的用户。为此,我有一个user表和一个role表(role.id在user表中称为role\u id) 我不想使用find
Data Access --> Business Logic --> Controller --> View
我的数据访问层由每个表的Zend_Db_表
、Zend_Db_表行集
和Zend_Db_表行
组成
我的业务逻辑存储在基于表
问题查询示例:
我想根据他的用户名获得一个特定的用户。为此,我有一个user
表和一个role
表(role.id
在user表中称为role\u id
)
我不想使用findDependentRowset
,它将为返回的每一行运行额外的查询。(在数据网格中显示尽可能多的行可以返回的数据时会出现问题)
我的选择(本例中使用getName()来简化,但它可以是任何处理):
- 在用户表中的角色表上进行自定义联接,该联接将返回由
关联数组组成的
。在这种情况下,我无法调用my索引数组
中定义的Model\u DbTable\u User
函数来构建名称(名字+中间名+姓氏)。即使我将数组“强制”到getName()
(或我的自定义Table\u行集),我也无法访问自定义类方法,因为我得到了一个通用的Zend\u Db\u Table\u行集
对象Zend\u Db\u Table\u行
- 创建自定义联接,但使用
生成名称在运行时的查询中,我仍然得到一个数组,但名称是build,因此我不需要CONCAT()
方法。但如果我有具体的逻辑来应用,我就被卡住了getName()
- 在我的数据库中创建一个加入
和user
表的视图,并创建一组新的role
、Zend\u DbTable
和Zend\u DbTableRowset
。这样,我就可以在数据库堆栈中拥有特定的逻辑Zend\u DbTableRow
- 作为ORM(推进或条令(1或2)),我没有这些方面的经验,我可能需要更多的信息来做出正确的选择
array(
array(row1),
array(row2)
);
一路反对
$row = $rowset->current();
$row->field;
无论如何都应该创建一个视图,因为它补充了其他想法,而不是与它们竞争。该观点将:
- 将数据库抽象为更易于使用的内容
- 更快,因为没有解析
- 可以在应用程序之外访问