|
- <?php
-
- namespace App\Repositories;
-
- use App\Codes\Model\QRServiceUsage;
- use App\Models\ColumnName;
- use App\Models\HtpmsCustomer\Existing\Parking;
- use App\Models\HtpmsCustomer\Mst\ShopNoRelation;
- use App\Models\HtpmsCustomer\QRService\CertificationAvailableSetting;
- use App\Repositories\BaseRepository;
- use Illuminate\Database\Query\JoinClause;
- use Illuminate\Support\Collection;
- use Illuminate\Support\Facades\DB;
-
- class CertificationAvailableSettingRepository extends BaseRepository
- {
-
- const CONDITION_SHOP_ID = ColumnName::SHOP_ID;
-
- const TABLE_SETTING = "setting";
- const TABLE_RELATION = "relation";
- const TABLE_PARKING = "parking";
-
-
- /**
- * コレクションを取得する
- *
- * @param array $condition
- * @return Collection<int, CertificationAvailableSettingRepositoryData>
- */
- public function get(array $condition): Collection
- {
-
- $table = ShopNoRelation::getBuilder(static::TABLE_RELATION)
- ->where(ShopNoRelation::COL_NAME_QR_SERVICE_USEAGE, QRServiceUsage::認証方式->value);
-
- $table->leftJoinSub(CertificationAvailableSetting::getBuilder(), static::TABLE_SETTING, function (JoinClause $join) {
- $join->on(
- $this->makeColumnName([static::TABLE_RELATION, ShopNoRelation::COL_NAME_PARKING_MANAGEMENT_CODE]),
- $this->makeColumnName([static::TABLE_SETTING, CertificationAvailableSetting::COL_NAME_PARKING_MANAGEMENT_CODE])
- );
- });
- $table->leftJoinSub(Parking::getBuilder(), static::TABLE_PARKING, function (JoinClause $join) {
- $join->on(
- $this->makeColumnName([static::TABLE_RELATION, ShopNoRelation::COL_NAME_PARKING_MANAGEMENT_CODE]),
- $this->makeColumnName([static::TABLE_PARKING, Parking::COL_NAME_PARKING_MANAGEMENT_CODE])
- );
- });
-
- // -----検索条件
- // GROUP_ID
- $this->where($table, $condition, static::CONDITION_SHOP_ID, $this->makeColumnName([static::TABLE_RELATION, ShopNoRelation::COL_NAME_SHOP_ID]));
-
-
- $table->select($this->columns());
- $table->orderBy($this->makeColumnName([self::TABLE_PARKING, Parking::COL_NAME_PARKING_MANAGEMENT_CODE]));
- $table->orderBy($this->makeColumnName([self::TABLE_SETTING, CertificationAvailableSetting::COL_NAME_DISCOUNT_TICKET_CODE]));
-
- $main = DB::connection("htpms_customer")->table($table, "main");
-
- // ソート
- $this->sort($main, $condition);
-
- // リミット
- $this->limit($main, $condition);
-
- return CertificationAvailableSettingRepositoryData::makeList($main->get());
- }
-
- private function columns()
- {
- $setting = static::TABLE_SETTING;
- $relation = static::TABLE_RELATION;
- $parking = static::TABLE_PARKING;
- $columns = [
- $this->makeColumnNameForSelect([$relation, ShopNoRelation::COL_NAME_SHOP_ID]),
- $this->makeColumnNameForSelect([$relation, ShopNoRelation::COL_NAME_PARKING_MANAGEMENT_CODE]),
- $this->makeColumnNameForSelect([$relation, ShopNoRelation::COL_NAME_SHOP_NO]),
- $this->makeColumnNameForSelect([$setting, CertificationAvailableSetting::COL_NAME_DISCOUNT_TICKET_CODE]),
- $this->makeColumnNameForSelect([$parking, Parking::COL_NAME_PARKING_NAME], "parking_name"),
- ];
-
- return $columns;
- }
- }
|