【问题标题】:Doctrine Paginator with NativeQuery带有 NativeQuery 的教条分页器
【发布时间】:2017-12-22 12:17:45
【问题描述】:

我正在尝试使用 Doctrine Paginator,但我必须使用 NativeQuery,因为我在查询中使用了自定义 DB 函数。

但我收到此错误:

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 函数不能以这种方式工作。老话题帮不了我。

【问题讨论】:

    标签: php doctrine-orm pagination doctrine nativequery


    【解决方案1】:

    对于将来可能遇到同样问题的人:

    我最终通过以下方式解决了这个问题:

    在我的模型中,我返回了标准查询结果:

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

    然后,在我的 Controller 中,我使用了 Zend Paginator:

    $iteratorAdapter = new \Zend\Paginator\Adapter\ArrayAdapter($result);
    $paginator = new \Zend\Paginator\Paginator($iteratorAdapter);
    $paginator->setCurrentPageNumber($page);
    $paginator->setItemCountPerPage(10);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-10
      • 1970-01-01
      • 1970-01-01
      • 2021-01-24
      • 1970-01-01
      • 2015-02-08
      • 2018-03-27
      • 2019-10-18
      相关资源
      最近更新 更多