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 GD32 SPI通信时我从机原样返回收到的数据怎么弄?
  • ¥15 phython读取excel表格报错 ^7个 SyntaxError: invalid syntax 语句报错
  • ¥20 @microsoft/fetch-event-source 流式响应问题
  • ¥15 ogg dd trandata 报错
  • ¥15 高缺失率数据如何选择填充方式
  • ¥50 potsgresql15备份问题
  • ¥15 Mac系统vs code使用phpstudy如何配置debug来调试php
  • ¥15 目前主流的音乐软件,像网易云音乐,QQ音乐他们的前端和后台部分是用的什么技术实现的?求解!
  • ¥60 pb数据库修改与连接
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?