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

huangapple go评论186阅读模式
英文:

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

问题

你好,你可以尝试在 $prestations 查询链中添加 count 方法来获取在应用分页之前的总数,然后将该总数分配给 'total' 键。以下是修改后的代码:

  1. $prestations = Prestation::with('service', 'facility', 'conciergeries.network')
  2. ->whereHas('service', function ($query) use ($searchService) {
  3. $query->select('id', 'name')->where('name', 'regexp', "/$searchService/i");
  4. })
  5. ->whereHas('facility', function ($query) use ($searchPartenaire) {
  6. $query->select('id', 'name')->where('name', 'regexp', "/$searchPartenaire/i");
  7. })
  8. ->whereHas('conciergeries.network', function ($query) use ($searchFiliale) {
  9. $query->select('id', 'name')->where('name', 'regexp', "/$searchFiliale/i");
  10. })
  11. ->where('name', 'regexp', "/$search/i")
  12. ->orderBy($orderBy, $orderDirection);
  13. $total = $prestations->count(); // 获取总数
  14. $prestations = $prestations->simplePaginate(50);
  15. $res = [
  16. 'results' => $prestations,
  17. 'total' => $total, // 分配总数
  18. ];
  19. return $res;

这样,你可以在应用分页之前获取并分配总数,而不会影响你的代码逻辑。

英文:

Here my code :

  1. $prestations = Prestation::with('service','facility','conciergeries.network')
  2. ->whereHas('service', function ($query) use ($searchService) {
  3. $query->select('id','name')->where('name', 'regexp', "/$searchService/i");
  4. })
  5. ->whereHas('facility', function ($query) use ($searchPartenaire) {
  6. $query->select('id','name')->where('name', 'regexp', "/$searchPartenaire/i");
  7. })
  8. ->whereHas('conciergeries.network', function ($query) use ($searchFiliale) {
  9. $query->select('id','name')->where('name', 'regexp', "/$searchFiliale/i");
  10. })
  11. ->where('name', 'regexp', "/$search/i")
  12. ->orderBy($orderBy, $orderDirection)
  13. ->simplePaginate(50);
  14. $res = [
  15. 'results' => $prestations,
  16. 'total' => Prestation::all()->count(),
  17. ];
  18. return $res;

Hi, actually i get all "Prestation" items at 'total', but i need the real total just before the simplePaginate(50); after all of my conditions.
How i can give this value at 'total' without disturbing my code ?
Thank you !

答案1

得分: 3

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

以下是一个简化的示例:

// 开始查询并将其存储为变量
$query = Prestation::where('name', 'regexp', "/$search/i");

// 现在计算总条目数
$count = $query->count();

// 最后,进行分页
$prestations = $query->simplePaginate(50);

当然,你可以在查询中添加所有其他约束条件,我只是为了简化回答而将它们移除了。

英文:

Eloquent queries are very flexible and you can store them as variables before executing them.

Here is a simplified example of what you could do:

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

Of course you can add all of your other constraints to the query, i've just removed them to simplify the answer.

答案2

得分: 1

请尝试以下内容:

  1. $prestations = Prestation::with('service', 'facility', 'conciergeries.network')
  2. ->whereHas('service', function ($query) use ($searchService) {
  3. $query->select('id', 'name')->where('name', 'regexp', "/$searchService/i");
  4. })
  5. ->whereHas('facility', function ($query) use ($searchPartenaire) {
  6. $query->select('id', 'name')->where('name', 'regexp', "/$searchPartenaire/i");
  7. })
  8. ->whereHas('conciergeries.network', function ($query) use ($searchFiliale) {
  9. $query->select('id', 'name')->where('name', 'regexp', "/$searchFiliale/i");
  10. })
  11. ->where('name', 'regexp', "/$search/i")
  12. ->orderBy($orderBy, $orderDirection);
  13. $res = [
  14. 'results' => $prestations->simplePaginate(50),
  15. 'total' => $prestations->count(),
  16. ];
  17. return $res;

如果您需要进一步的帮助,请告诉我。

英文:

Please try this

  1. $prestations = Prestation::with('service','facility','conciergeries.network')
  2. ->whereHas('service', function ($query) use ($searchService) {
  3. $query->select('id','name')->where('name', 'regexp', "/$searchService/i");
  4. })
  5. ->whereHas('facility', function ($query) use ($searchPartenaire) {
  6. $query->select('id','name')->where('name', 'regexp', "/$searchPartenaire/i");
  7. })
  8. ->whereHas('conciergeries.network', function ($query) use ($searchFiliale) {
  9. $query->select('id','name')->where('name', 'regexp', "/$searchFiliale/i");
  10. })
  11. ->where('name', 'regexp', "/$search/i")
  12. ->orderBy($orderBy, $orderDirection);
  13. $res = [
  14. 'results' => $prestations->simplePaginate(50),
  15. 'total' => $prestations->count(),
  16. ];
  17. return $res;

huangapple
  • 本文由 发表于 2020年1月3日 22:11:21
  • 转载请务必保留本文链接:https://go.coder-hub.com/59580018.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定