【问题标题】:Laravel Eloquent Pagination, how to count before pagination with filters?Laravel Eloquent Pagination,如何在使用过滤器分页之前计数?
【发布时间】:2020-04-22 02:28:20
【问题描述】:

这是我的代码:

$prestations = Prestation::with('service','facility','conciergeries.network')
            ->whereHas('service', function ($query) use ($searchService) {
                $query->select('id','name')->where('name', 'regexp', "/$searchService/i");
            })  
            ->whereHas('facility', function ($query) use ($searchPartenaire) {
                $query->select('id','name')->where('name', 'regexp', "/$searchPartenaire/i");
            })
            ->whereHas('conciergeries.network', function ($query) use ($searchFiliale) {
                $query->select('id','name')->where('name', 'regexp', "/$searchFiliale/i");
            })
                ->where('name', 'regexp', "/$search/i")
                ->orderBy($orderBy, $orderDirection)
                ->simplePaginate(50);

        $res = [
            'results' => $prestations,
            'total' => Prestation::all()->count(),
        ];

        return $res;

嗨,实际上我在“总计”中获得了所有“Prestation”项目,但在我的所有条件之后,我需要在 simplePaginate(50); 之前的真正总数。 我怎样才能在不干扰我的代码的情况下以“总计”给出这个值? 谢谢!

【问题讨论】:

    标签: php laravel eloquent laravel-query-builder


    【解决方案1】:

    Eloquent 查询非常灵活,您可以在执行之前将它们存储为变量。

    以下是您可以执行的操作的简化示例:

    // Start your query and store it as a variable
    $query = Prestation::where('name', 'regexp', "/$search/i");
    
    // Now count the total number of entries which will return
    $count = $query->count();
    
    // Finally, do your pagination
    $prestations = $query->simplePaginate(50);
    

    当然,您可以将所有其他约束添加到查询中,我刚刚删除了它们以简化答案。

    【讨论】:

      【解决方案2】:

      请试试这个

       $prestations = Prestation::with('service','facility','conciergeries.network')
                      ->whereHas('service', function ($query) use ($searchService) {
                          $query->select('id','name')->where('name', 'regexp', "/$searchService/i");
                      })  
                      ->whereHas('facility', function ($query) use ($searchPartenaire) {
                          $query->select('id','name')->where('name', 'regexp', "/$searchPartenaire/i");
                      })
                      ->whereHas('conciergeries.network', function ($query) use ($searchFiliale) {
                          $query->select('id','name')->where('name', 'regexp', "/$searchFiliale/i");
                      })
                          ->where('name', 'regexp', "/$search/i")
                          ->orderBy($orderBy, $orderDirection);
      
                  $res = [
                      'results' => $prestations->simplePaginate(50),
                      'total' => $prestations->count(),
                  ];
      
                  return $res;
      

      【讨论】:

        猜你喜欢
        • 2022-07-11
        • 1970-01-01
        • 2023-03-08
        • 2015-06-17
        • 1970-01-01
        • 2019-03-01
        • 2016-02-29
        • 2016-04-20
        • 1970-01-01
        相关资源
        最近更新 更多