You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自定义Laravel Cashier默认用户模型/表?改用租户表存订阅信息

如何将Laravel Cashier的默认订阅表改为自定义tenant表

1. 让Tenant模型继承Billable trait

将Laravel Cashier的Billable trait从User模型转移到你的Tenant模型上,这是核心步骤:

namespace App\Models;

use Laravel\Cashier\Billable;
use Illuminate\Database\Eloquent\Model;

class Tenant extends Model
{
    use Billable;

    // 根据你的业务需求配置模型属性
    protected $fillable = ['name', 'email', 'phone'];
}

2. 给tenant表添加Cashier所需字段

Cashier默认会给users表添加订阅相关字段,现在你需要手动给tenant表创建迁移:

php artisan make:migration add_cashier_fields_to_tenants_table

在生成的迁移文件中添加以下字段:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up()
    {
        Schema::table('tenants', function (Blueprint $table) {
            $table->string('stripe_id')->nullable()->index();
            $table->string('pm_type')->nullable();
            $table->string('pm_last_four')->nullable();
            $table->timestamp('trial_ends_at')->nullable();
        });
    }

    public function down()
    {
        Schema::table('tenants', function (Blueprint $table) {
            $table->dropColumn(['stripe_id', 'pm_type', 'pm_last_four', 'trial_ends_at']);
        });
    }
};

运行迁移生效:

php artisan migrate

3. 调整订阅模型的关联关系

Cashier的默认Subscription模型关联的是User表,需要修改为关联Tenant表。你可以创建自定义Subscription模型来覆盖默认逻辑:

namespace App\Models;

use Laravel\Cashier\Subscription as CashierSubscription;

class Subscription extends CashierSubscription
{
    // 重写user关联,指向Tenant模型
    public function user()
    {
        return $this->belongsTo(Tenant::class, 'user_id');
    }
}

然后在Tenant模型中指定使用这个自定义Subscription模型:

namespace App\Models;

use Laravel\Cashier\Billable;
use Illuminate\Database\Eloquent\Model;
use App\Models\Subscription;

class Tenant extends Model
{
    use Billable;

    protected $fillable = ['name', 'email', 'phone'];

    protected function subscriptionsModel()
    {
        return Subscription::class;
    }
}

4. 全局配置Cashier默认模型(可选)

发布Cashier配置文件:

php artisan vendor:publish --tag="cashier-config"

在config/cashier.php中修改默认模型为Tenant:

'model' => App\Models\Tenant::class,

5. 使用Tenant模型处理订阅逻辑

之后所有订阅操作都通过Tenant模型完成,示例代码:

// 创建新订阅
$tenant = Tenant::find(1);
$tenant->newSubscription('default', 'your_stripe_price_id')->create($paymentMethod);

// 获取租户订阅信息
$subscription = $tenant->subscription('default');

// 取消订阅
$tenant->subscription('default')->cancel();

内容的提问来源于stack exchange,提问作者Faizan Dayo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 18:50:55