【发布时间】:2023-03-28 22:00:01
【问题描述】:
收银台版本:13.5 Laravel 版本:8.63.0 PHP版本:8.0.1 数据库驱动和版本:mysql 10.4 当我尝试添加新订阅时,出现错误“资源 ID 不能为空或空格。”。在尝试使用用户模型时,它工作正常。但我需要用另一个自定义模型 AppUser 来做。这与用户模型非常相似。
在启动方法下的AppserviceProvder中,我已经给出了
Cashier::useCustomerModel(AppUser::class);
在 AppUser 模型中给定 Billable 和关系,
namespace App\Models;
use Carbon\Carbon;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Cashier\Billable;
// Authenticatable trait is required to work as User Model
class AppUser extends Authenticatable
{
use Billable;
use Notifiable;
public function subscriptions()
{
return $this->hasMany(\App\Subscription::class, 'app_user_id')->orderBy('created_at', 'desc');
}
我的订阅模式是
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Laravel\Cashier\Subscription as CashierSubscription;
class Subscription extends CashierSubscription
{
use HasFactory;
public function owner()
{
return $this->belongsTo(AppUser::class);
}
public function items()
{
return $this->hasMany(SubscriptionItem::class);
}
}
和
SubscriptionItem 模型是
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Laravel\Cashier\SubscriptionItem as CachierSubscriptionItem;
class SubscriptionItem extends CachierSubscriptionItem
{
use HasFactory;
public function subscription()
{
return $this->belongsTo(Subscription::class);
}
}
In My Config/ Auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'app_user' => [
'driver' => 'session',
'provider' => 'app_users',
],
],
'providers' => [
'app_users' => [
'driver' => 'eloquent',
'model' => App\Models\AppUser::class,
],
'users' => [
'driver' => 'database',
'table' => 'app_users',
],
],
最后我的控制器是,
config(['cashier.model' => 'App\Models\AppUser']);
$data = $request->all();
$user = AppUser::find($data['user_id']);
$paymentMethod = $request->input('payment_method');
$plan = $request->input('plan');
$plan = $plan ? $plan : 'halfyearly_NZD';
$response = $user->newSubscription('main', $plan)->create($paymentMethod);
【问题讨论】:
标签: php laravel strip laravel-cashier