matt9292
matt9292

Reputation: 411

Error inserting a record using Laravel Cashier and many-to-many relationship

I have a many-to-many relationship between the User and Subscription tables in Laravel, as follows:

In Subscription.php:

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

In User.php

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

I create a new subscription in Cashier (using Stripe) as follows:

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

(Note that the product and plan names are currently the same and the user's card is on record, hence the lack of a stripe token.)

But when I run this I get an error:

SQLSTATE[HY000]: General error: 1364 Field 'user_id' doesn't have a default value (SQL: insert into subscriptions (name, stripe_id, stripe_plan, quantity, updated_at, created_at) values (projects, sub_EY1zRywZ1jUjLl, projects, 1, 2019-02-17 20:07:36, 2019-02-17 20:07:36))

I'm not sure if the relationship is causing the issue or whether it's my new subscription code. How do I fix this error?

UPDATE:

I've made the following change and I still get the same error:

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

UPDATE 2:

I've made the following change and the exact same error still occurs:

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

  // $user = Auth::user();

Upvotes: 0

Views: 491

Answers (2)

bgul
bgul

Reputation: 146

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

According to this, I think you need to fill the user_id column with an id value via $id = Auth::id();


Taken from laravel documentation:

Additional User Details

If you would like to specify additional customer details, you may do so by passing them as the second argument to the create method:

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

UPDATE

Could you try this one:

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

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

Upvotes: 0

Ian
Ian

Reputation: 141

Do you have the Billable trait added to your User model?

Upvotes: 0

Related Questions