領収証発行サービス
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

82 lines
2.3KB

  1. <?php
  2. namespace App\Repositories;
  3. use App\Models\User;
  4. use App\Repositories\BaseRepository;
  5. use Illuminate\Support\Collection;
  6. use Illuminate\Support\Facades\DB;
  7. class LoginUserRepository extends BaseRepository
  8. {
  9. const CONDITION_ID = 'id';
  10. const CONDITION_NAME = 'name';
  11. const CONDITION_ROLE = 'role';
  12. const CONDITION_EMAIL = 'email';
  13. const CONDITION_CONTRACT_ID = 'contract_id';
  14. const TABLE_USER = "user";
  15. /**
  16. * コレクションを取得する
  17. *
  18. * @param array $condition
  19. * @return Collection<LoginUserRepositoryData>
  20. */
  21. public function get(array $condition): Collection
  22. {
  23. $table = User::getBuilder(static::TABLE_USER);
  24. // -----検索条件
  25. // ID
  26. $this->where($table, $condition, static::CONDITION_ID, $this->makeColumnName([static::TABLE_USER, User::COL_NAME_ID]));
  27. // 名前
  28. $name = data_get($condition, static::CONDITION_NAME);
  29. if ($name) {
  30. $table->where($this->makeColumnName([static::TABLE_USER, User::COL_NAME_NAME]), 'like', "%{$name}%");
  31. }
  32. // EMAIL
  33. $email = data_get($condition, static::CONDITION_EMAIL);
  34. if ($email) {
  35. $table->where($this->makeColumnName([static::TABLE_USER, User::COL_NAME_EMAIL]), 'like', "%{$email}%");
  36. }
  37. // 契約ID
  38. $this->where($table, $condition, static::CONDITION_CONTRACT_ID, $this->makeColumnName([static::TABLE_USER, User::COL_NAME_CONTRACT_ID]));
  39. $table->select($this->columns());
  40. $main = DB::table($table, "main");
  41. // ソート
  42. $this->sort($main, $condition);
  43. $main->orderBy(static::CONDITION_ID);
  44. // リミット
  45. $this->limit($main, $condition);
  46. return LoginUserRepositoryData::makeList($main->get());
  47. }
  48. private function columns()
  49. {
  50. $user = static::TABLE_USER;
  51. $columns = [
  52. $this->makeColumnNameForSelect([$user, User::COL_NAME_ID]),
  53. $this->makeColumnNameForSelect([$user, User::COL_NAME_NAME]),
  54. $this->makeColumnNameForSelect([$user, User::COL_NAME_ROLE]),
  55. $this->makeColumnNameForSelect([$user, User::COL_NAME_EMAIL]),
  56. $this->makeColumnNameForSelect([$user, User::COL_NAME_UPDATED_AT]),
  57. ];
  58. return $columns;
  59. }
  60. }