Files
chatroom/app/Models/VipPaymentOrder.php

93 lines
2.1 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* 文件功能VIP 会员支付订单模型
* 负责记录聊天室用户购买 VIP 时的本地订单、远端支付单号与开通结果
* 通过本地订单可串联下单、回调、会员开通与后台查询链路
*/
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class VipPaymentOrder extends Model
{
use HasFactory;
/** @var string 表名 */
protected $table = 'vip_payment_orders';
/** @var array<int, string> 可批量赋值字段 */
protected $fillable = [
'order_no',
'merchant_order_no',
'user_id',
'vip_level_id',
'status',
'amount',
'subject',
'payment_order_no',
'provider',
'provider_trade_no',
'vip_name',
'vip_duration_days',
'sync_return_payload',
'async_notify_payload',
'paid_at',
'opened_vip_at',
'meta',
];
/**
* 属性类型转换
*
* @return array<string, string>
*/
protected function casts(): array
{
return [
'amount' => 'decimal:2',
'vip_duration_days' => 'integer',
'sync_return_payload' => 'array',
'async_notify_payload' => 'array',
'meta' => 'array',
'paid_at' => 'datetime',
'opened_vip_at' => 'datetime',
];
}
/**
* 关联:支付订单所属用户
*/
public function user(): BelongsTo
{
return $this->belongsTo(User::class, 'user_id');
}
/**
* 关联:支付订单对应的 VIP 等级
*/
public function vipLevel(): BelongsTo
{
return $this->belongsTo(VipLevel::class, 'vip_level_id');
}
/**
* 判断订单是否已经完成支付
*/
public function isPaid(): bool
{
return $this->status === 'paid';
}
/**
* 判断订单是否已经完成会员开通
*/
public function isVipOpened(): bool
{
return $this->opened_vip_at !== null;
}
}