在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:插入subscriptions
(name
,stripe_id
,{{1} },stripe_plan
,quantity
,updated_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,
]);
答案 0 :(得分:0)
您是否已将Billable
特性添加到User
模型中?
答案 1 :(得分:0)
General error: 1364 Field 'user_id' doesn't have a default value.
因此,我认为您需要通过 $ id = Auth :: id();
用ID值填充 user_id 列
其他用户详细信息
如果您想指定其他客户详细信息,可以通过将其作为第二个参数传递给create方法来实现:
$user->newSubscription('main', 'monthly')->create($stripeToken, [
'email' => $email,
]);
更新
您能试试这个吗?
$id = Auth::id();
$user = User::find($id);
$user->newSubscription($planname, $planname)->create();