首页 > 解决方案 > 如何为 knp 分页器写一个好的 dql

问题描述

我有这个查询:

 $data1 = $session->get('oficina');
 $data2 = $session->get('area');
 $dql = $this->getDoctrine()->getRepository('AppBundle:Registro')->createQueryBuilder('l')
                -> where('l.oficina = (:data1) and l.area = (:data2)')
                -> setParameter('data1', $data1)
                -> setParameter('data2', $data2)
                -> orderBy('l.id', 'DESC')->getQuery();

我得到了这个错误:警告:preg_split() 期望参数 2 是字符串,给定对象

我想将此查询与分页器 knp 捆绑包一起使用我将查询发送到分页器:

    $list = $em->createQuery($dql); 
$paginator  = $this->get('knp_paginator');
$pagination = $paginator->paginate(
    $list, /* query NOT result */
    $request->query->getInt('page', 1)/*page number*/,
    5/*limit per page*/
);

你知道查询有什么问题吗???

标签: databasesymfony

解决方案


试试看 :

我认为您在这一行有错误

-> where('l.oficina = (:data1) and l.area = (:data2)')

用它

    ->Where('l.oficina = :data1')
    ->andWhere('l.area = :data2')
    -> setParameter('data1', $data1)
    -> setParameter('data2', $data2)

或者

   $data1 = $session->get('oficina');
        $data2 = $session->get('area');
        $em    = $this->get('doctrine.orm.entity_manager');
        $dql   = "SELECT l FROM AppBundle:Registro a WHERE l.oficina = '$data1' and l.area = '$data2'";
        $list = $em->createQuery($dql);

        $paginator  = $this->get('knp_paginator');
        $pagination = $paginator->paginate(
            $list,
            $request->query->getInt('page', 1)/*page number*/,
            5,/*limit per page*/
            array('defaultSortFieldName' => 'l.id', 'defaultSortDirection' => 'desc')
        );

推荐阅读