带有 NativeQuery 的 Doctrine 分页器
Doctrine Paginator with NativeQuery
我正在尝试使用 Doctrine Paginator,但我不得不使用 NativeQuery,因为我在我的查询中使用了自定义数据库函数。
但是我得到这个错误:
Fatal error: Uncaught Error: Call to undefined method Doctrine\ORM\NativeQuery::getFirstResult()
到目前为止我的代码是:
$sql = "SELECT std_modulos_aulas.idaula, std_modulos_aulas.idmodulo, conteudo, std_modulos_aulas.titulo
FROM uov.std_modulos_aulas
INNER JOIN uov.std_modulos ON std_modulos_aulas.idmodulo = std_modulos.idmodulo
INNER JOIN uov.std_cursos ON std_cursos.idcurso = std_modulos.idcurso
WHERE std_modulos.publicar = 's' AND std_modulos.excluido = 'n' AND std_modulos_aulas.publicar = 's' AND std_cursos.idcurso = ".$curso." AND academico.strip_tags(LOWER(std_modulos_aulas.conteudo)) LIKE '".$termo."'
ORDER BY std_modulos.ordem ASC, std_modulos_aulas ASC";
$rsm = new ResultSetMapping;
$rsm->addScalarResult('idaula', 'idaula');
$rsm->addScalarResult('idmodulo', 'idmodulo');
$rsm->addScalarResult('conteudo', 'conteudo');
$rsm->addScalarResult('titulo', 'titulo');
$query = $this->em->createNativeQuery($sql, $rsm);
return new Paginator($query, $fetchJoinCollection = false);
任何帮助都会很好。我已经尝试过使用 QueryBuilder,但我的 strip_tags 函数无法正常工作。旧话题帮不了我。
对于以后可能遇到同样问题的人:
我最终通过以下方式解决了这个问题:
在我的模型中,我返回了一个标准查询结果:
$sql = "SELECT std_modulos_aulas.idaula, std_modulos_aulas.idmodulo, conteudo, std_modulos_aulas.titulo
FROM uov.std_modulos_aulas
INNER JOIN uov.std_modulos ON std_modulos_aulas.idmodulo = std_modulos.idmodulo
INNER JOIN uov.std_cursos ON std_cursos.idcurso = std_modulos.idcurso
WHERE std_modulos.publicar = 's' AND std_modulos.excluido = 'n' AND std_modulos_aulas.publicar = 's' AND std_cursos.idcurso = ".$curso." AND academico.strip_tags(LOWER(std_modulos_aulas.conteudo)) LIKE '".$termo."'
ORDER BY std_modulos.ordem ASC, std_modulos_aulas ASC";
$rsm = new ResultSetMapping;
$rsm->addScalarResult('idaula', 'idaula');
$rsm->addScalarResult('idmodulo', 'idmodulo');
$rsm->addScalarResult('conteudo', 'conteudo');
$rsm->addScalarResult('titulo', 'titulo');
$query = $this->em->createNativeQuery($sql, $rsm);
return $query->execute();
然后,在我的控制器上,我使用了 Zend 分页器:
$iteratorAdapter = new \Zend\Paginator\Adapter\ArrayAdapter($result);
$paginator = new \Zend\Paginator\Paginator($iteratorAdapter);
$paginator->setCurrentPageNumber($page);
$paginator->setItemCountPerPage(10);
我正在尝试使用 Doctrine Paginator,但我不得不使用 NativeQuery,因为我在我的查询中使用了自定义数据库函数。
但是我得到这个错误:
Fatal error: Uncaught Error: Call to undefined method Doctrine\ORM\NativeQuery::getFirstResult()
到目前为止我的代码是:
$sql = "SELECT std_modulos_aulas.idaula, std_modulos_aulas.idmodulo, conteudo, std_modulos_aulas.titulo
FROM uov.std_modulos_aulas
INNER JOIN uov.std_modulos ON std_modulos_aulas.idmodulo = std_modulos.idmodulo
INNER JOIN uov.std_cursos ON std_cursos.idcurso = std_modulos.idcurso
WHERE std_modulos.publicar = 's' AND std_modulos.excluido = 'n' AND std_modulos_aulas.publicar = 's' AND std_cursos.idcurso = ".$curso." AND academico.strip_tags(LOWER(std_modulos_aulas.conteudo)) LIKE '".$termo."'
ORDER BY std_modulos.ordem ASC, std_modulos_aulas ASC";
$rsm = new ResultSetMapping;
$rsm->addScalarResult('idaula', 'idaula');
$rsm->addScalarResult('idmodulo', 'idmodulo');
$rsm->addScalarResult('conteudo', 'conteudo');
$rsm->addScalarResult('titulo', 'titulo');
$query = $this->em->createNativeQuery($sql, $rsm);
return new Paginator($query, $fetchJoinCollection = false);
任何帮助都会很好。我已经尝试过使用 QueryBuilder,但我的 strip_tags 函数无法正常工作。旧话题帮不了我。
对于以后可能遇到同样问题的人:
我最终通过以下方式解决了这个问题:
在我的模型中,我返回了一个标准查询结果:
$sql = "SELECT std_modulos_aulas.idaula, std_modulos_aulas.idmodulo, conteudo, std_modulos_aulas.titulo
FROM uov.std_modulos_aulas
INNER JOIN uov.std_modulos ON std_modulos_aulas.idmodulo = std_modulos.idmodulo
INNER JOIN uov.std_cursos ON std_cursos.idcurso = std_modulos.idcurso
WHERE std_modulos.publicar = 's' AND std_modulos.excluido = 'n' AND std_modulos_aulas.publicar = 's' AND std_cursos.idcurso = ".$curso." AND academico.strip_tags(LOWER(std_modulos_aulas.conteudo)) LIKE '".$termo."'
ORDER BY std_modulos.ordem ASC, std_modulos_aulas ASC";
$rsm = new ResultSetMapping;
$rsm->addScalarResult('idaula', 'idaula');
$rsm->addScalarResult('idmodulo', 'idmodulo');
$rsm->addScalarResult('conteudo', 'conteudo');
$rsm->addScalarResult('titulo', 'titulo');
$query = $this->em->createNativeQuery($sql, $rsm);
return $query->execute();
然后,在我的控制器上,我使用了 Zend 分页器:
$iteratorAdapter = new \Zend\Paginator\Adapter\ArrayAdapter($result);
$paginator = new \Zend\Paginator\Paginator($iteratorAdapter);
$paginator->setCurrentPageNumber($page);
$paginator->setItemCountPerPage(10);