Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

91 lines
2.7KB

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