Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.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 Framework2修复此查询_Php_Mysql_Zend Framework_Zend Framework2_Zend Db - Fatal编程技术网

Php 如何使用Zend Framework2修复此查询

Php 如何使用Zend Framework2修复此查询,php,mysql,zend-framework,zend-framework2,zend-db,Php,Mysql,Zend Framework,Zend Framework2,Zend Db,我正在使用ZendFramework2,我需要进行一个custon查询。我在mysql中尝试了我的查询,它工作得非常好 SELECT p.idProyecto,p.nombre, e.nombre, e.apellido, sum(ar.tiempoEstimado) estimado,DATE_FORMAT(p.fechaInicio, '%Y/%m/%d') as inicio, DATE_FORMAT(p.fechaFin, '%Y/%m/%d') as f

我正在使用ZendFramework2,我需要进行一个custon查询。我在mysql中尝试了我的查询,它工作得非常好

SELECT p.idProyecto,p.nombre, e.nombre, e.apellido, sum(ar.tiempoEstimado) 
       estimado,DATE_FORMAT(p.fechaInicio, '%Y/%m/%d') as inicio, 
       DATE_FORMAT(p.fechaFin, '%Y/%m/%d') as fin, sum(r.tiempoRegistrado) as t_real 
FROM Actividad as a 
LEFT JOIN ActividadResponsable as ar 
  ON a.idActividad=ar.idActividad 
  and a.fechaInicio>="2014-10-13"   
  and a.fechaFin<="2014-10-19" 
LEFT JOIN ActividadPlaneada as ap 
  On ap.idActividad = ar.idActividad 
  and ar.idActividad = a.idActividad 
LEFT JOIN tipoActividad as ta 
  on ta.idTipoActividad= ap.idTipoActividad
LEFT JOIN proyecto as p 
  ON p.idProyecto=a.idProyecto 
LEFT JOIN registro as r 
  ON a.idActividad=r.idActividad 
  and r.fechaRegistro>="2014-10-13 00:00:00" 
  and r.fechaRegistro<="2014-10-19 23:59:00" 
LEFT JOIN empleado as e 
  ON p.creador = e.idEmpleado
GROUP BY a.idProyecto;

联接查询中的
属于联接
on
语句,而不是查询
where
语句,您需要将
on
语句添加为
表达式,如下所示:

$exp = new Expression('Actividad.idActividad=ar.idActividad and a.fechaInicio>=? 
and a.fechaFin<=?',array($inicio,$fin));

$query->join(array('ar' => 'ActividadResponsable'),  $exp , array(), 'left');
$exp=new表达式('Actividad.idActividad=ar.idActividad和a.fechaInicio>=?

和a.fechafine唯一的区别是,对于zf2,您没有为
Actividad
表使用别名。您对此有任何错误吗?@blackishop哦,没有,那不是错误。因为该语句属于联接,而不是整个查询。谢谢,我在查找了4个小时后修复了它。我不知道表达式()在这个问题中,我还有一个关于Zend框架的问题,也许你可以帮助我。谢谢。
SELECT p.idProyecto, p.nombre, e.nombre, e.apellido, SUM(ar.tiempoEstimado) as estimado, p.fechaInicio as inicio, p.fechaFin as fin, sum(r.tiempoRegistrado) as t_real 
FROM `Actividad` 
LEFT JOIN `ActividadResponsable` AS `ar` ON `Actividad`.`idActividad`=`ar`.`idActividad` 
LEFT JOIN `ActividadPlaneada` AS `ap` ON `ap`.`idActividad` = `ar`.`idActividad` and `ar`.`idActividad` = `Actividad`.`idActividad` 
LEFT JOIN `TipoActividad` AS `ta` ON `ta`.`idTipoActividad`= `ap`.`idTipoActividad` 
LEFT JOIN `Proyecto` AS `p` ON `p`.`idProyecto`=`Actividad`.`idProyecto` 
LEFT JOIN `Registro` AS `r` ON `Actividad`.`idActividad`=`r`.`idActividad` 
LEFT JOIN `Empleado` AS `e` ON `p`.`creador` = `e`.`idEmpleado` 
WHERE `Actividad`.`fechaInicio` >= :where1 AND `Actividad`.`fechaFin` <= :where2 AND `r`.`fechaRegistro` >= :where3 AND `r`.`fechaRegistro` <= :where4 
GROUP BY `Actividad`.`idProyecto`
$dbAdapterConfig = array(
  'driver'   => 'Pdo_Mysql',
  'database' => '*',
  'username' => '*',
  'password' => '*',
  'charset'  => 'utf8'
);
$dbAdapter = new Adapter($dbAdapterConfig);
$sql = new Sql($dbAdapter);
$query = $sql->select();
$query->from('Actividad');
$query->columns(array(new \Zend\Db\Sql\Expression('p.idProyecto, p.nombre, e.nombre, e.apellido, SUM(ar.tiempoEstimado) as estimado, p.fechaInicio as inicio, p.fechaFin as fin, sum(r.tiempoRegistrado) as t_real')));
$query->join(array('ar' => 'ActividadResponsable'),   'Actividad.idActividad=ar.idActividad', array(), 'left');
$query->where->greaterThanOrEqualTo('Actividad.fechaInicio', $inicio);
$query->where->lessThanOrEqualTo('Actividad.fechaFin', $fin);
$query->join(array('ap' => 'ActividadPlaneada'),   'ap.idActividad = ar.idActividad and ar.idActividad = Actividad.idActividad', array(), 'left');
$query->join(array('ta' => 'TipoActividad'),   'ta.idTipoActividad= ap.idTipoActividad', array(), 'left');
$query->join(array('p' => 'Proyecto'),   'p.idProyecto=Actividad.idProyecto', array(), 'left');
$query->join(array('r' => 'Registro'),   'Actividad.idActividad=r.idActividad', array(), 'left');
$query->where->greaterThanOrEqualTo('r.fechaRegistro', "2014-10-13 00:00:00");
$query->where->lessThanOrEqualTo('r.fechaRegistro', "2014-10-19 23:59:00");
$query->join(array('e' => 'Empleado'), 'p.creador = e.idEmpleado', array(), 'left');
$query->group(array('Actividad.idProyecto'));
$statement = $sql->prepareStatementForSqlObject($query);
$result = $statement->execute();
$records = array();
foreach ($result as $return) {
  $records[] = $return;
}
return $result;
$exp = new Expression('Actividad.idActividad=ar.idActividad and a.fechaInicio>=? 
and a.fechaFin<=?',array($inicio,$fin));

$query->join(array('ar' => 'ActividadResponsable'),  $exp , array(), 'left');