使用Laravel Cashier和多对多关系插入记录时出错

时间:2019-02-17 20:39:35

标签: laravel many-to-many laravel-5.5 laravel-cashier

在Laravel中,用户表和订阅表之间存在多对多关系,如下所示:

在Subscription.php中:

public function users()
{
    return $this->belongsToMany('App\User')->withTimestamps();
}

在User.php中

public function subscriptions()
{
    return $this->belongsToMany('App\Subscription')->withTimestamps();
}

我(使用Stripe)在收银台中创建一个新订阅,如下所示:

$user->newSubscription($planname, $planname)->create();

(请注意,产品名称和计划名称当前相同,并且用户卡已记录在案,因此缺少条纹令牌。)

但是当我运行它时,我得到一个错误:

SQLSTATE [HY000]:常规错误:1364字段'user_id'没有默认值(SQL:插入subscriptionsnamestripe_id,{{1} },stripe_planquantityupdated_at)值(项目,sub_EY1zRywZ1jUjLl,项目,2019年1月1日,2019年2月17日:2019年2月7日:2019年2月17日: 36))

我不确定这种关系是引起问题的原因还是我的新订阅代码。如何解决此错误?

更新:

我进行了以下更改,但仍然出现相同的错误:

created_at

更新2:

我进行了以下更改,并且仍然出现完全相同的错误:

$user->newSubscription($planname, $planname)->create(null,[
    'user_id' => $user->id, 
]);

2 个答案:

答案 0 :(得分:0)

您是否已将Billable特性添加到User模型中?

答案 1 :(得分:0)

General error: 1364 Field 'user_id' doesn't have a default value. 

因此,我认为您需要通过 $ id = Auth :: id();

用ID值填充 user_id


取自laravel文档:

其他用户详细信息

如果您想指定其他客户详细信息,可以通过将其作为第二个参数传递给create方法来实现:

$user->newSubscription('main', 'monthly')->create($stripeToken, [
    'email' => $email, 
]);

更新

您能试试这个吗?

 $id = Auth::id();
 $user = User::find($id);

 $user->newSubscription($planname, $planname)->create();