joydeep-bhowmik / laravel-point-vault
一个用于在 Eloquent 模型中管理积分交易的 Laravel 积分管理系统
Requires
- php: ^8.0
- laravel/framework: ^8.0
Requires (Dev)
- fakerphp/faker: ^1.23
- illuminate/database: *
- orchestra/testbench: ^9.4
- pestphp/pest: ^3.2
- pestphp/pest-plugin-laravel: ^3.0
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 许可证 许可。