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.

92 lines
2.8KB

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