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

Laravel Cashier设置trial_ends_at报Illegal offset type错误如何解决

错误原因

Illegal offset type 错误是由于字段配置或批量赋值规则不符合要求,以及和Laravel Cashier的Billable trait逻辑冲突导致的,按以下步骤修复即可:

解决方案

  1. 修正User模型的日期字段声明
    Laravel 8及以上版本已废弃$dates属性,替换为$casts做字段类型转换,避免Carbon对象解析异常:
// User模型中删除原有$dates配置,替换为如下内容
protected $casts = [
    'created_at' => 'datetime',
    'updated_at' => 'datetime',
    'trial_ends_at' => 'datetime',
];
  1. 补充批量赋值规则
    在User模型的$fillable数组中加入trial_ends_at,允许该字段批量写入:
protected $fillable = [
    'name',
    'email',
    'password',
    'role',
    'company_id',
    'trial_ends_at', // 新增这行
];
  1. 改用Cashier原生方法设置试用期(推荐)
    避免直接在create方法中传入trial_ends_at和Billable trait的逻辑冲突,创建用户后调用Cashier提供的官方方法设置试用期:
// 创建用户时不传trial_ends_at字段
$user = User::create([
    'name' => $data['name'],
    'email' => $data['email'],
    'password' => $data['password'],
    'role'  => 'admin',
    'company_id' => $Company->id,                      
]);
// 调用官方方法设置30天试用期
$user->trialUntil(Carbon::now()->addDays(30));
$user->save();

补充说明

如果后续需要创建带试用的正式订阅,可直接在订阅方法中链式调用trialDays(30),Cashier会自动同步更新trial_ends_at字段值,无需手动处理。

内容的提问来源于stack exchange,提问作者MAHA OUEGHLANI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:06:05