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.

95 lines
3.5KB

  1. <?php
  2. namespace App\Repositories;
  3. use App\Models\ColumnName;
  4. use App\Models\HtpmsCustomer\Existing\Parking;
  5. use App\Models\HtpmsCustomer\QRService\ServiceParkingGroup;
  6. use App\Models\HtpmsCustomer\QRService\ServiceParkingGroupRelation;
  7. use App\Repositories\BaseRepository;
  8. use Illuminate\Database\Query\JoinClause;
  9. use Illuminate\Support\Collection;
  10. use Illuminate\Support\Facades\DB;
  11. class QRServiceParkingGroupRepository extends BaseRepository
  12. {
  13. const CONDITION_QR_SERVICE_PARKING_GROUP_ID = ColumnName::QR_SERVICE_PARKING_GROUP_ID;
  14. const CONDITION_NAME = 'name';
  15. const CONDITION_PARKING_MANAGEMENT_CODE = ColumnName::PARKING_MANAGEMENT_CODE;
  16. const TABLE_GROUP = "group";
  17. const TABLE_RELATION = "relation";
  18. const TABLE_PARKING = "parking";
  19. /**
  20. * コレクションを取得する
  21. *
  22. * @param array $condition
  23. * @return Collection<int, QRServiceParkingGroupRepositoryData>
  24. */
  25. public function get(array $condition): Collection
  26. {
  27. $table = ServiceParkingGroup::getBuilder(static::TABLE_GROUP);
  28. $table->leftJoinSub(ServiceParkingGroupRelation::getBuilder(), static::TABLE_RELATION, function (JoinClause $join) {
  29. $join->on(
  30. $this->makeColumnName([static::TABLE_GROUP, ServiceParkingGroup::COL_NAME_ID]),
  31. $this->makeColumnName([static::TABLE_RELATION, ServiceParkingGroupRelation::COL_NAME_QR_SERVICE_PARKING_GROUP_ID])
  32. );
  33. });
  34. $table->leftJoinSub(Parking::getBuilder(), static::TABLE_PARKING, function (JoinClause $join) {
  35. $join->on(
  36. $this->makeColumnName([static::TABLE_RELATION, ServiceParkingGroupRelation::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_QR_SERVICE_PARKING_GROUP_ID, $this->makeColumnName([static::TABLE_GROUP, ServiceParkingGroup::COL_NAME_ID]));
  43. // 名前
  44. $name = data_get($condition, static::CONDITION_NAME);
  45. if ($name) {
  46. $table->where($this->makeColumnName([static::TABLE_GROUP, ServiceParkingGroup::COL_NAME_NAME]), 'like', "%{$name}%");
  47. }
  48. // 駐車場管理コード
  49. $this->where($table, $condition, static::CONDITION_PARKING_MANAGEMENT_CODE, $this->makeColumnName([
  50. static::TABLE_RELATION,
  51. ServiceParkingGroupRelation::COL_NAME_PARKING_MANAGEMENT_CODE
  52. ]));
  53. $table->select($this->columns());
  54. $main = DB::connection("htpms_customer")->table($table, "main");
  55. // ソート
  56. $this->sort($main, $condition);
  57. // リミット
  58. $this->limit($main, $condition);
  59. return QRServiceParkingGroupRepositoryData::makeList($main->get());
  60. }
  61. private function columns()
  62. {
  63. $group = static::TABLE_GROUP;
  64. $relation = static::TABLE_RELATION;
  65. $parking = static::TABLE_PARKING;
  66. $columns = [
  67. $this->makeColumnNameForSelect([$group, ServiceParkingGroup::COL_NAME_ID]),
  68. $this->makeColumnNameForSelect([$group, ServiceParkingGroup::COL_NAME_NAME]),
  69. $this->makeColumnNameForSelect([$parking, Parking::COL_NAME_PARKING_MANAGEMENT_CODE], ColumnName::PARKING_MANAGEMENT_CODE),
  70. $this->makeColumnNameForSelect([$parking, Parking::COL_NAME_PARKING_NAME], "parking_name"),
  71. ];
  72. return $columns;
  73. }
  74. }