FromQueryWithCustomQuerySize.php 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. namespace Maatwebsite\Excel\Tests\Data\Stubs;
  3. use Illuminate\Contracts\Queue\ShouldQueue;
  4. use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
  5. use Illuminate\Database\Eloquent\Relations\Relation;
  6. use Illuminate\Database\Query\Builder;
  7. use Illuminate\Support\Facades\DB;
  8. use Maatwebsite\Excel\Concerns\Exportable;
  9. use Maatwebsite\Excel\Concerns\FromQuery;
  10. use Maatwebsite\Excel\Concerns\WithCustomQuerySize;
  11. use Maatwebsite\Excel\Concerns\WithMapping;
  12. use Maatwebsite\Excel\Tests\Data\Stubs\Database\Group;
  13. class FromQueryWithCustomQuerySize implements FromQuery, WithCustomQuerySize, WithMapping, ShouldQueue
  14. {
  15. use Exportable;
  16. /**
  17. * @return Builder|EloquentBuilder|Relation
  18. */
  19. public function query()
  20. {
  21. $query = Group::with('users')
  22. ->join('group_user', 'groups.id', '=', 'group_user.group_id')
  23. ->select('groups.*', DB::raw('count(group_user.user_id) as number_of_users'))
  24. ->groupBy('groups.id')
  25. ->orderBy('number_of_users');
  26. return $query;
  27. }
  28. /**
  29. * @return int
  30. */
  31. public function querySize(): int
  32. {
  33. return Group::has('users')->count();
  34. }
  35. /**
  36. * @param Group $row
  37. * @return array
  38. */
  39. public function map($row): array
  40. {
  41. return [
  42. $row->id,
  43. $row->name,
  44. $row->number_of_users,
  45. ];
  46. }
  47. }