在 Zend Framework 中使用 Zend_Db_Table 的 CakePHP 风格的数据库查询结果?

Posted

技术标签:

【中文标题】在 Zend Framework 中使用 Zend_Db_Table 的 CakePHP 风格的数据库查询结果?【英文标题】:CakePHP style database query results in Zend Framework using Zend_Db_Table? 【发布时间】:2012-02-06 04:34:08 【问题描述】:

如果您有一个涉及许多连接的复杂 SQL 查询(例如返回带有关联多对多标签的文章),Zend 框架中是否有任何东西可以产生可爱的 Cakephp 风格的数据库结果:

Array
(
    [0] => Array
        (
            [ModelName] => Array
                (
                    [id] => 83
                    [field1] => value1
                    [field2] => value2
                    [field3] => value3
                )

            [AssociatedModelName] => Array
                (
                    [id] => 1
                    [field1] => value1
                    [field2] => value2
                    [field3] => value3
                )

        )
)

我不介意它是一个对象而不是一个数组,我只是想知道通过使用 Zend_Db_Table 构建一个 SELECT JOIN 查询是否可以节省一些工作量并获得一些格式良好的结果。

这是我用来构建查询的代码:

$select = $db->select(Zend_Db_Table::SELECT_WITH_FROM_PART);
$select->from('tableName','fieldName')
     ->join('joinTable', 'joinTable.keyId = tableName.keyId',array())
     ->where('tableName.userId = ?', $userId);
$resultSet = $db->fetchAll($select);

【问题讨论】:

作为一个从 Cake 出身到不得不与 ZF 合作的人,我感受到了您的痛苦,并希望看到您得到的答案。 嗯,这当然不是没有选择的,我可以告诉你这么多。继承代码,多么有趣。让我们看看是否有任何反馈。这与我目前看到的差不多:mattmccormick.ca/2010/04/24/… 我认为按照我使用 Zend Framework 的速度,我将求助于使用基于 SQL 查询的解决方案,例如 mysql GROUP_CONCAT ***.com/questions/2358300/… 对于 LEFT JOINS 和 MySQL GROUP_CONCAT,还有一个基于 SQL 的解决方法(尽管从 ZF 的角度来看,它还不能回答这个问题):***.com/questions/4455958/… 【参考方案1】:

没有什么比我所要求的数据更漂亮了。 正常的 Result 将是一个行集对象,但是 ->toArray() 可用于大多数 *Zend_DbTable_Abstract* 方法。

$result->toArray() 使用 Zend_debug::dump() 截断和转储:

Lead Tracks array(7) 
  [0] => array(9) 
    ["trackid"] => string(2) "24"
    ["weekendid"] => string(1) "8"
    ["shiftid"] => string(1) "1"
    ["bidlocationid"] => string(1) "1"
    ["qty"] => string(1) "2"
    ["lead"] => string(1) "1"
    ["bidloc"] => string(14) "out of service"
    ["deptcode"] => string(3) "491"
    ["stationid"] => string(1) "1"

查询:

where = $this->select(Zend_Db_Table::SELECT_WITH_FROM_PART)
                     ->setIntegrityCheck(FALSE);
    $where->where('track.bidlocationid = ?', $bidlocationId)
          ->where('lead = ?', $lead)
          ->join('bidlocation', 'bidlocation.bidlocationid = track.bidlocationid')
          ->where('bidlocation.stationid = ?', $stationId)
          ->order('shiftid ASC')
          ->order('weekendid ASC');

    $result = $this->fetchAll($where);

对不起,只是实用程序:)

【讨论】:

以上是关于在 Zend Framework 中使用 Zend_Db_Table 的 CakePHP 风格的数据库查询结果?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Zend_Loader 选择不同版本的 Zend Framework 加载及其问题

使用Zend Framework列出S3目录中的所有文件

如何使用Zend Framework 2使用Rest API

Zend Framework windows8.1下配置zend framework1.12

如何模拟 Zend\Form 提交而不在 Zend Framework 2/3 中显示表单?

在 Zend Framework 布局脚本中使用 Dojo BorderContainer