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.

73 lines
2.4KB

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