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.

93 lines
3.0KB

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