2013-03-18 9 views
6

ZF2 недавно обновлен до версии 2.1.4 с API базы данных изменилась http://framework.zend.com/security/advisory/ZF2013-03Zend Framework 2: подзапросы

Теперь код, который я использовал для подзапроса был исключением:

$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

В ближайшее время, я думаю, что это исправлено.

ответ

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(); 

Ссылка: ZF2 - subqueries