dra11767 2017-04-25 13:53
浏览 78
已采纳

分页和where子句

I have an issue when I want to add where clauses to my pagination:

This works fine:

  $builder = User::orderBy(
        $criteria->getOrderBy(),
        $criteria->getOrderWay()
    )
    ->paginate(
        $criteria->getPerPage(),
        array('*'),
        '',
        $criteria->getPage()
    );
    return $builder;

If I want to add where conditions I can if I do the following (it works btw):

$builder = User::orderBy(
    $criteria->getOrderBy(),
    $criteria->getOrderWay()
)->where(array(array('state','=',0)))
->paginate(
    $criteria->getPerPage(),
    array('*'),
    '',
    $criteria->getPage()
);
return $builder;

But If I want to do this without chaining:

 $builder = User::orderBy(
        $criteria->getOrderBy(),
        $criteria->getOrderWay()
    );
 $builder->where(array(array('state','=',0)));
    $builder->paginate(
        $criteria->getPerPage(),
        array('*'),
        '',
        $criteria->getPage()
    );
    return $builder;

I get the following exception:

Call to undefined method Illuminate\Database\Query\Builder::lastPage()

So the pagination is not applied, but why?

How can I add where clauses without duplicating code like this?

$arrClauses = /** example **/;

if(empty($arrClauses)) {
      $builder = User::orderBy(
            $criteria->getOrderBy(),
            $criteria->getOrderWay()
        )
        ->paginate(
            $criteria->getPerPage(),
            array('*'),
            '',
            $criteria->getPage()
        );
        return $builder;
} else {
    $builder = User::orderBy(
        $criteria->getOrderBy(),
        $criteria->getOrderWay()
    )->where($arrClauses)
    ->paginate(
        $criteria->getPerPage(),
        array('*'),
        '',
        $criteria->getPage()
    );
    return $builder;
}
  • 写回答

3条回答 默认 最新

  • dongzou7134 2017-04-25 13:58
    关注

    You get the error because you're returning Query Builder instance and not LengthAwarePaginator instance. Do this to make it work:

    $builder = User::orderBy(
        $criteria->getOrderBy(),
        $criteria->getOrderWay()
    );
    $builder = $builder->where(array(array('state','=',0)));
    $builder = $builder->paginate(
        $criteria->getPerPage(),
        array('*'),
        '',
        $criteria->getPage()
    );
    return $builder;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题