Laravel Eloquent 分页,分页前如何用过滤器统计?

Laravel Eloquent Pagination, how to count before pagination with filters?

这是我的代码:

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

你好,实际上我在 'total' 得到了所有 "Prestation" 项,但我需要在我的所有条件之后就在 simplePaginate(50); 之前的真实总数。 我如何才能在 'total' 处给出这个值而不影响我的代码? 谢谢!

请试试这个

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

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

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