Zend框架2:子查询(Zend Framework 2: subqueries)

2019-07-21 21:08发布

ZF2最近更新到2.1.4版本与数据库的API已经改变http://framework.zend.com/security/advisory/ZF2013-03

现在,我使用子查询的代码是一个例外:

$sub = new Select('md_type');
$sub->columns(array(new Expression('COUNT(mt2.parent_id) as total')))
    ->where(array(
        new \Zend\Db\Sql\Predicate\Expression('mt2.parent_id = mt1.id')
    ))
;

$subquery = new \Zend\Db\Sql\Expression("({$sub->getSqlString()})");

$select = new \Zend\Db\Sql\Select('mt1');
$select->columns(array('*', 'cnt' => $subquery));

$子> getSqlString()------>注意:试图引用在Zend的\ DB \适配器\平台\ MySQL中的值,而不扩展/驱动程序的支持可以在生产环境中引入安全漏洞。

我无法找到使用子查询的另一种方式。 请告诉我如何如何,现在该怎么使用子查询。 谢谢!


这是错误: https://github.com/zendframework/zf2/pull/4068

在不久的将来,我认为它修好。

Answer 1:

请试试这个。

$sql = new Sql($this->_adapter);
$mainSelect = $sql->select()->from('mt1');
$subQry = $sql->select()
        ->from('md_type')
        ->columns(array('orderCount' => new \Zend\Db\Sql\Expression('COUNT(md_type.parent_id)')))
        ->where('mt2.parent_id = mt1.id');
$mainSelect->columns(
        array(
            'id', 
            'total' => new \Zend\Db\Sql\Expression('?', array($subQry)),
        )
);

$statement = $sql->prepareStatementForSqlObject($mainSelect);
$comments = $statement->execute();
$resultSet = new ResultSet();
$resultSet->initialize($comments);

return $resultSet->toArray();

参考: ZF2 -子查询



Answer 2:

我遇到了同样的问题试图运行与存在的子查询。 我写了一个博客帖子与指导您如何设置它的代码示例。 http://aronkerr.blogspot.com/2013/08/zf2-sql-exists-sub-query-using-zf2.html?m=1



文章来源: Zend Framework 2: subqueries