'decimal:2', 'used_at' => 'datetime', 'metadata' => 'array', ]; protected $dates = [ 'used_at', ]; /** * Relationships */ public function coupon() { return $this->belongsTo(Coupon::class); } public function user() { return $this->belongsTo(User::class); } public function subscription() { return $this->belongsTo(Subscription::class); } /** * Get formatted discount amount */ public function getFormattedDiscountAttribute(): string { return $this->currency.' '.number_format($this->discount_amount, 2); } /** * Scope: By user */ public function scopeByUser($query, $userId) { return $query->where('user_id', $userId); } /** * Scope: By coupon */ public function scopeByCoupon($query, $couponId) { return $query->where('coupon_id', $couponId); } /** * Scope: Within date range */ public function scopeBetweenDates($query, $startDate, $endDate) { return $query->whereBetween('used_at', [$startDate, $endDate]); } }