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.

86 lines
3.3KB

  1. <?php
  2. namespace App\Repositories;
  3. use App\Codes\Model\QRServiceUsage;
  4. use App\Models\ColumnName;
  5. use App\Models\HtpmsCustomer\Existing\Parking;
  6. use App\Models\HtpmsCustomer\Mst\ShopNoRelation;
  7. use App\Models\HtpmsCustomer\QRService\CertificationAvailableSetting;
  8. use App\Repositories\BaseRepository;
  9. use Illuminate\Database\Query\JoinClause;
  10. use Illuminate\Support\Collection;
  11. use Illuminate\Support\Facades\DB;
  12. class CertificationAvailableSettingRepository extends BaseRepository
  13. {
  14. const CONDITION_SHOP_ID = ColumnName::SHOP_ID;
  15. const TABLE_SETTING = "setting";
  16. const TABLE_RELATION = "relation";
  17. const TABLE_PARKING = "parking";
  18. /**
  19. * コレクションを取得する
  20. *
  21. * @param array $condition
  22. * @return Collection<int, CertificationAvailableSettingRepositoryData>
  23. */
  24. public function get(array $condition): Collection
  25. {
  26. $table = ShopNoRelation::getBuilder(static::TABLE_RELATION)
  27. ->where(ShopNoRelation::COL_NAME_QR_SERVICE_USEAGE, QRServiceUsage::認証方式->value);
  28. $table->leftJoinSub(CertificationAvailableSetting::getBuilder(), static::TABLE_SETTING, function (JoinClause $join) {
  29. $join->on(
  30. $this->makeColumnName([static::TABLE_RELATION, ShopNoRelation::COL_NAME_PARKING_MANAGEMENT_CODE]),
  31. $this->makeColumnName([static::TABLE_SETTING, CertificationAvailableSetting::COL_NAME_PARKING_MANAGEMENT_CODE])
  32. );
  33. });
  34. $table->leftJoinSub(Parking::getBuilder(), static::TABLE_PARKING, function (JoinClause $join) {
  35. $join->on(
  36. $this->makeColumnName([static::TABLE_RELATION, ShopNoRelation::COL_NAME_PARKING_MANAGEMENT_CODE]),
  37. $this->makeColumnName([static::TABLE_PARKING, Parking::COL_NAME_PARKING_MANAGEMENT_CODE])
  38. );
  39. });
  40. // -----検索条件
  41. // GROUP_ID
  42. $this->where($table, $condition, static::CONDITION_SHOP_ID, $this->makeColumnName([static::TABLE_RELATION, ShopNoRelation::COL_NAME_SHOP_ID]));
  43. $table->select($this->columns());
  44. $table->orderBy($this->makeColumnName([self::TABLE_PARKING, Parking::COL_NAME_PARKING_MANAGEMENT_CODE]));
  45. $table->orderBy($this->makeColumnName([self::TABLE_SETTING, CertificationAvailableSetting::COL_NAME_DISCOUNT_TICKET_CODE]));
  46. $main = DB::connection("htpms_customer")->table($table, "main");
  47. // ソート
  48. $this->sort($main, $condition);
  49. // リミット
  50. $this->limit($main, $condition);
  51. return CertificationAvailableSettingRepositoryData::makeList($main->get());
  52. }
  53. private function columns()
  54. {
  55. $setting = static::TABLE_SETTING;
  56. $relation = static::TABLE_RELATION;
  57. $parking = static::TABLE_PARKING;
  58. $columns = [
  59. $this->makeColumnNameForSelect([$relation, ShopNoRelation::COL_NAME_SHOP_ID]),
  60. $this->makeColumnNameForSelect([$relation, ShopNoRelation::COL_NAME_PARKING_MANAGEMENT_CODE]),
  61. $this->makeColumnNameForSelect([$relation, ShopNoRelation::COL_NAME_SHOP_NO]),
  62. $this->makeColumnNameForSelect([$setting, CertificationAvailableSetting::COL_NAME_DISCOUNT_TICKET_CODE]),
  63. $this->makeColumnNameForSelect([$parking, Parking::COL_NAME_PARKING_NAME], "parking_name"),
  64. ];
  65. return $columns;
  66. }
  67. }