parfum/app/Models/Voucher.php

59 lines
1.5 KiB
PHP

<?php
namespace App\Models;
use App\Enums\VoucherType;
use Illuminate\Database\Eloquent\Attributes\Scope;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
use Veelasky\LaravelHashId\Eloquent\HashableId;
class Voucher extends Model
{
use HasFactory, HashableId, SoftDeletes;
protected $guarded = ['id'];
protected function casts(): array
{
return [
'type' => VoucherType::class,
'discount_amount' => 'int',
'min_purchase' => 'int',
'max_discount' => 'int',
'quota' => 'int',
'available_count' => 'int',
'limit_per_user' => 'int',
];
}
#[Scope]
public function active(Builder $query): void
{
$query->whereDate('start_date', '<=', now())
->where(function ($q) {
$q->whereNull('end_date')
->orWhereDate('end_date', '>=', now());
});
}
public function outlets(): BelongsToMany
{
return $this->belongsToMany(Outlet::class);
}
public function orders(): HasMany
{
return $this->hasMany(Order::class);
}
public function users(): BelongsToMany
{
return $this->belongsToMany(User::class);
}
}