joydeep-bhowmik/laravel-point-vault

一个用于在 Eloquent 模型中管理积分交易的 Laravel 积分管理系统

v1.0.0 2024-09-28 06:56 UTC

This package is auto-updated.

Last update: 2024-09-28 07:10:24 UTC


README

介绍

Laravel Point Vault 为您的 Laravel 模型提供了一个灵活的积分系统。此包允许模型拥有一个“积分库”,您可以在其中轻松地进行积分借记和贷记、跟踪余额并记录交易。

本文档将指导您完成包的安装、配置和使用。

要求

  • Laravel 版本:^8.0 或更高版本
  • PHP 版本:^7.4 或更高版本

安装

要安装此包,请使用 Composer

composer require joydeep-bhowmik/laravel-point-vault

注册服务提供者

您需要注册包的服务提供者。如果您使用的是 Laravel 5.5 或更高版本,这会自动由框架的包自动发现功能处理。

如果您使用的是 Laravel 的早期版本或已禁用自动发现,请手动将服务提供者添加到 config/app.php 文件中

'providers' => [
    JoydeepBhowmik\LaravelPointVault\Providers\LaravelPointVaultServiceProvider::class,
],

迁移

注册服务提供者后,运行包的迁移以创建必要的数据库表以进行积分交易。

php artisan migrate

配置

您可能需要发布迁移文件(如果需要)以在运行迁移之前进行修改

php artisan vendor:publish --provider="JoydeepBhowmik\LaravelPointVault\Providers\LaravelPointVaultServiceProvider" --tag="migrations"

使用

应用 HasPoints 特性

要使用积分系统,将 HasPoints 特性添加到任何您希望管理积分的 Eloquent 模型中。此特性为积分的贷记、借记和检查余额添加了功能。

示例

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use JoydeepBhowmik\LaravelPointVault\Traits\HasPoints;

class User extends Model
{
    use HasPoints;
}

HasPoints 特性提供的功能

getCurrentBalance()

此方法返回模型当前的积分余额。

$balance = $user->getCurrentBalance();
echo $balance; // Outputs the user's current point balance

credit($amount, $note = null)

此方法向模型贷记指定数量的积分。

$user->credit(100, 'Initial bonus');

debit($amount, $note = null)

此方法从模型的余额中扣除指定数量的积分。

$user->debit(50, 'Purchase item');

注意:借记操作在执行交易之前检查用户是否有足够的积分。如果没有足够的积分,将抛出异常。

points()

此方法定义了模型与 Point 模型之间的多态关系。您可以使用它来访问模型的全部积分交易。

$transactions = $user->points;

自定义积分交易逻辑

如果您想自定义积分的贷记或借记方式,可以扩展提供的方法或直接与 Point 模型交互。

数据库结构

该包期望有一个名为 points 的表,包含以下列

  • id:主键
  • pointable_id:拥有积分的模型 ID(多态关系)
  • pointable_type:拥有积分的模型类型(多态关系)
  • amount:贷记或借记的积分数量
  • transaction_type:可以是 'CREDIT' 或 'DEBIT'
  • note:交易的可选备注
  • created_at / updated_at:交易发生的时间戳

事件

如果您想监听积分交易,也可以挂钩 Laravel 的事件系统。虽然提供的代码中未明确包含,但您可以在 makeTransaction 方法中轻松地分发事件,以处理更复杂的情况。

许可证

此包是开源软件,根据 MIT 许可证 许可。