|
- <?php
-
- namespace App\Repositories\Custom\HelloTechno;
-
- use App\Models\HtCustomParkingName;
- use App\Models\UseByKeySummary;
- use App\Repositories\UseSummaryRepository as BaseRepository;
- use App\Util\SelectQueryUtil;
- use Illuminate\Database\Query\Builder;
- use Illuminate\Database\Query\JoinClause;
- use Illuminate\Support\Collection;
- use Illuminate\Support\Facades\DB;
-
- class UseSummaryRepository extends BaseRepository
- {
- // 必須検索項目
- const CONDITION_CUSTOMER_CODE = 'customer_code';
-
- private const TABLE_NAME = "name";
-
- /**
- * コレクションを取得する
- *
- * @param array $condition
- * @return Collection<int, UseSummaryRepositoryData>
- */
- public function get(array $condition): Collection
- {
- return UseSummaryRepositoryData::makeList($this->builder($condition)->get());
- }
-
- protected function builder(array $condition): Builder
- {
-
- $builder = parent::builder($condition);
-
- // 顧客名解決
- $name = HtCustomParkingName::getBuilder()->select([
- HtCustomParkingName::COL_NAME_CUSTOMER_CODE,
- HtCustomParkingName::COL_NAME_CUSTOMER_NAME,
- DB::raw('RANK() OVER(PARTITION BY customer_code ORDER BY updated_at DESC) as rank')
- ]);
-
- $builder
- ->leftJoinSub($name, static::TABLE_NAME, function (JoinClause $join) {
- $join->on(
- $this->makeColumnName([static::TABLE_SUMMARY, UseByKeySummary::COL_NAME_SUMMARY_KEY1]),
- $this->makeColumnName([static::TABLE_NAME, HtCustomParkingName::COL_NAME_CUSTOMER_CODE])
- )->where($this->makeColumnName([static::TABLE_NAME, 'rank']), 1);
- });
-
- $customerCode = data_get($condition, self::CONDITION_CUSTOMER_CODE);
- if ($customerCode) {
- $builder->where($this->makeColumnName([static::TABLE_NAME, HtCustomParkingName::COL_NAME_CUSTOMER_CODE]), $customerCode);
- }
-
- return $builder;
- }
-
- protected function columns()
- {
- $name = self::TABLE_NAME;
- $columns = [
- ...parent::columns(),
- SelectQueryUtil::select([$name, HtCustomParkingName::COL_NAME_CUSTOMER_CODE])->build(),
- SelectQueryUtil::select([$name, HtCustomParkingName::COL_NAME_CUSTOMER_NAME])->build(),
- ];
- return $columns;
- }
- }
|