領収証発行サービス
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

66 行
2.1KB

  1. <?php
  2. namespace App\Repositories\Custom\HelloTechno;
  3. use App\Models\HtCustomParkingName;
  4. use App\Models\UseByKeySummary;
  5. use App\Repositories\UseSummaryRepository as BaseRepository;
  6. use App\Util\SelectQueryUtil;
  7. use Illuminate\Database\Query\Builder;
  8. use Illuminate\Database\Query\JoinClause;
  9. use Illuminate\Support\Collection;
  10. use Illuminate\Support\Facades\DB;
  11. class UseSummaryRepository extends BaseRepository
  12. {
  13. // 必須検索項目
  14. const CONDITION_CUSTOMER_CODE = 'customer_code';
  15. private const TABLE_NAME = "name";
  16. /**
  17. * コレクションを取得する
  18. *
  19. * @param array $condition
  20. * @return Collection<UseSummaryRepositoryData>
  21. */
  22. public function get(array $condition): Collection
  23. {
  24. return UseSummaryRepositoryData::makeList($this->builder($condition)->get());
  25. }
  26. protected function builder(array $condition): Builder
  27. {
  28. $builder = parent::builder($condition);
  29. // 顧客名解決
  30. $name = HtCustomParkingName::getBuilder()->select([
  31. HtCustomParkingName::COL_NAME_CUSTOMER_CODE,
  32. HtCustomParkingName::COL_NAME_CUSTOMER_NAME,
  33. DB::raw('RANK() OVER(PARTITION BY customer_code ORDER BY updated_at DESC) as rank')
  34. ]);
  35. $builder
  36. ->leftJoinSub($name, static::TABLE_NAME, function (JoinClause $join) {
  37. $join->on(
  38. $this->makeColumnName([static::TABLE_SUMMARY, UseByKeySummary::COL_NAME_SUMMARY_KEY1]),
  39. $this->makeColumnName([static::TABLE_NAME, HtCustomParkingName::COL_NAME_CUSTOMER_CODE])
  40. )->where($this->makeColumnName([static::TABLE_NAME, 'rank']), 1);
  41. });
  42. return $builder;
  43. }
  44. protected function columns()
  45. {
  46. $name = self::TABLE_NAME;
  47. $columns = [
  48. ...parent::columns(),
  49. SelectQueryUtil::select([$name, HtCustomParkingName::COL_NAME_CUSTOMER_CODE])->build(),
  50. SelectQueryUtil::select([$name, HtCustomParkingName::COL_NAME_CUSTOMER_NAME])->build(),
  51. ];
  52. return $columns;
  53. }
  54. }