Laravel Cashier设置trial_ends_at报Illegal offset type错误如何解决
错误原因
Illegal offset type 错误是由于字段配置或批量赋值规则不符合要求,以及和Laravel Cashier的Billable trait逻辑冲突导致的,按以下步骤修复即可:
解决方案
- 修正User模型的日期字段声明
Laravel 8及以上版本已废弃$dates属性,替换为$casts做字段类型转换,避免Carbon对象解析异常:
// User模型中删除原有$dates配置,替换为如下内容 protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'trial_ends_at' => 'datetime', ];
- 补充批量赋值规则
在User模型的$fillable数组中加入trial_ends_at,允许该字段批量写入:
protected $fillable = [ 'name', 'email', 'password', 'role', 'company_id', 'trial_ends_at', // 新增这行 ];
- 改用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
相关产品推荐
相关产品推荐

