|
- <?php
-
- namespace App\Repositories;
-
- use App\Models\Contract;
- use App\Models\ReceiptIssuingOrder;
- use App\Models\UseByKeySummary;
- use App\Util\SelectQueryUtil;
- use Illuminate\Database\Query\Builder;
- use Illuminate\Database\Query\JoinClause;
- use Illuminate\Support\Collection;
-
- class UseSummaryByContractRepository extends UseSummaryRepository
- {
-
- const CONDITION_CONTRACT_NAME = 'contract_name';
-
- private const TABLE_CONTRACT = 'contract';
-
- /**
- * コレクションを取得する
- *
- * @param array $condition
- * @return Collection<UseSummaryByContractRepositoryData>
- */
- public function get(array $condition): Collection
- {
-
-
-
- return UseSummaryByContractRepositoryData::makeList($this->builder($condition)->get());
- }
-
- protected function builder(array $condition): Builder
- {
-
- $builder = parent::builder($condition);
-
- // 契約名解決
- $builder
- ->leftJoinSub(Contract::getBuilder(), static::TABLE_CONTRACT, function (JoinClause $join) {
- $join->on(
- $this->makeColumnName([static::TABLE_SUMMARY, UseByKeySummary::COL_NAME_CONTRACT_ID]),
- $this->makeColumnName([static::TABLE_CONTRACT, Contract::COL_NAME_ID])
- );
- });
-
-
- $contractName = data_get($condition, self::CONDITION_CONTRACT_NAME);
- if ($contractName) {
- $builder->where($this->makeColumnName([self::TABLE_CONTRACT, Contract::COL_NAME_NAME]), 'like', '%' . $contractName . '%');
- }
-
- return $builder;
- }
-
- protected function columns()
- {
- $contract = self::TABLE_CONTRACT;
- $columns = [
- ...parent::columns(),
- SelectQueryUtil::select([$contract, Contract::COL_NAME_ID])->as("contract_id")->build(),
- SelectQueryUtil::select([$contract, Contract::COL_NAME_NAME])->as("contract_name")->build(),
- ];
- return $columns;
- }
-
- protected function groupByColumn(): string
- {
- return ReceiptIssuingOrder::COL_NAME_CONTRACT_ID;
- }
- }
|