Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend_Db_表联接查询与数据库视图_Php_Zend Framework_Coding Style_Zend Db_Zend Db Table - Fatal编程技术网

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()
    函数来构建名称(名字+中间名+姓氏)。即使我将数组“强制”到
    Zend\u Db\u Table\u行集
    (或我的自定义Table\u行集),我也无法访问自定义类方法,因为我得到了一个通用的
    Zend\u Db\u Table\u行
    对象

  • 创建自定义联接,但使用
    CONCAT()
    生成名称在运行时的查询中,我仍然得到一个数组,但名称是build,因此我不需要
    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;

无论如何都应该创建一个视图,因为它补充了其他想法,而不是与它们竞争。该观点将:

  • 将数据库抽象为更易于使用的内容
  • 更快,因为没有解析
  • 可以在应用程序之外访问
创建视图后,可以选择最能解决问题的策略。如果您要创建一个表示单个实体的表单,那么ORM可能是一个很好的选择。但是,如果要显示大型数据列表或生成包含许多实体的报告,那么使用SQL之类的声明性语言可能更容易,性能也会更好