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));
$ sub-> getSqlString()------>注意:尝试在没有扩展/驱动程序支持的Zend \ Db \ Adapter \ Platform \ Mysql中引用值可能会在生产环境中引入安全漏洞。
我找不到使用子查询的替代方法。请告诉我如何使用,现在如何使用子查询。谢谢!
这是错误:https://github.com/zendframework/zf2/pull/4068
在不久的将来,我认为这是固定的。
答案 0 :(得分:6)
请试一试。
$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();
答案 1 :(得分:-1)
我遇到了同样的问题,尝试使用exists运行子查询。我写了一篇博文,其中包含代码示例,指导您如何设置它。 http://aronkerr.blogspot.com/2013/08/zf2-sql-exists-sub-query-using-zf2.html?m=1