Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

53 lines
1.6KB

  1. <?php
  2. namespace App\Models\HtpmsCustomer\Existing;
  3. use App\Models\Cast;
  4. use App\Models\ColumnName;
  5. use App\Util\DateUtil;
  6. use Illuminate\Database\Eloquent\Model;
  7. use Illuminate\Database\Query\Builder;
  8. use Illuminate\Support\Facades\DB;
  9. class DiscountTicket extends Model
  10. {
  11. const COL_NAME_PARK_ID = 'park_id';
  12. const COL_NAME_TICKET_NAME = 'ticketname';
  13. const COL_NAME_DISCOUNT_TICKET_CODE = 'lineno';
  14. const COL_NAME_START_DATETIME = 'start_datetime';
  15. protected $connection = 'htpms_customer';
  16. protected $table = 'tbl2_discountticket';
  17. protected $fillable = []; // 参照専用
  18. protected $visible = [
  19. self::COL_NAME_TICKET_NAME,
  20. self::COL_NAME_DISCOUNT_TICKET_CODE,
  21. "ticket_name",
  22. ColumnName::DISCOUNT_TICKET_CODE,
  23. ];
  24. protected $casts = [
  25. self::COL_NAME_START_DATETIME => Cast::DATETIME,
  26. ];
  27. public static function getBuilder(string $name = 'main'): Builder
  28. {
  29. $now = DateUtil::now();
  30. $instance = new static();
  31. $tablename = self::getTableName();
  32. $sub = function (Builder $query) use ($tablename) {
  33. $query->selectRaw('*, rank() over (partition by park_id, adjuster_id, lineno order by start_datetime desc) as rank')
  34. ->from($tablename)
  35. ->where('start_datetime', '<=', DB::raw('CURRENT_TIMESTAMP'));
  36. };
  37. return DB::connection($instance->getConnectionName())->table($sub, $name)->where($name . '.rank', 1);
  38. }
  39. public static function getTableName(): string
  40. {
  41. return (new static)->getTable();
  42. }
  43. }