104. 为模型增加凭证以及凭证兑换——beyondcode/laravel-vouchers
为模型增加凭证以及凭证兑换—— beyondcode/laravel-vouchers
你应该遇到过关于凭证,票据,入场券相关的需求,需要给某个模型创建一些凭证,有个凭证兑换码,以及过期时间,用户可以输入兑换码,输入正确的用户就可以完成凭证的兑换。
今天介绍的这个扩展包 github.com/beyondcode/laravel-vouc... 就是提供了这样的功能。
安装
$ composer require beyondcode/laravel-vouchers
$ php artisan vendor:publish --provider="BeyondCode\Vouchers\VouchersServiceProvider"
这里文档有点问题,需要增双引号。
执行 migrate。
创建了两张数据表:
- vouchers —— 凭证表;
- user_voucher —— 用户与凭证的关系表。
使用
我这里准备好了一个话题模型,并填充了一些数据。类似的业务可能是,所有的话题都不是公开的,必须凭兑换码进入,每个兑换码只能使用一次。
创建 Voucher
app/Topic.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use BeyondCode\Vouchers\Traits\HasVouchers;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class Topic extends Model
{
use HasVouchers;
protected $fillable = [
'title', 'content', 'user_id'
];
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
}
当然还可以增加一些自定义的额外数据给凭证:
$topic->createVoucher(['foo' => 'bar']);
兑换 Voucher
接着来兑换凭证。先修改一下 User 模型, 增加 Triat BeyondCode\Vouchers\Traits\CanRedeemVouchers
。
$voucher = User::first()->redeemCode('93XK-YASE');
$voucher->data->get('foo');
通过 $voucher->model;
就可以获取到凭证对应的模型。
另一种兑换的方式是通过 redeemVoucher
。
$voucher = Topic::first()->createVoucher();
User::first()->redeemVoucher($voucher);
添加过期时间
凭证还可以添加过期时间
Topic::first()->createVouchers(2, [], today()->subDays(1));
User::first()->redeemCode('EBRY-ZVST');