将收银员模型从用户更改为酒店

Change cashier model from User to Hotel

我想为收银台使用其他模型,而不是默认模型。我有 2 tables UserHotel 一对多关系(一个用户可以拥有多个酒店)。我想增加用户可以为其酒店添加不同付款方式的可能性。我从 user 中删除了收银台列并添加到 hotel table.

我输入 services.php :

'stripe' => [
    'model' => \App\Models\Hotel::class,
    'key' => env('STRIPE_KEY'),
    'secret' => env('STRIPE_SECRET'),
],

在我的控制器中:

public function get(Request $request)
{
    $creditorId = config('id');
    $user = $request->user();
    $stripeUser = $user->createOrGetStripeCustomer();
    .............

 }

我在 Hotel.php Billable 中添加并从用户中删除了 Billable

现在我遇到了错误:

Call to undefined method App\Models\User::createOrGetStripeCustomer()

过去曾为 User.php 工作。我该如何解决这个错误?

User.php :

class User extends Authenticatable implements CanResetPassword {

 use Notifiable, HasSanctumTokens, HasFactory;

 protected $fillable = [
  'email',
  'password',
  'lang',
 ];
 .......

Hotel.php :

class Hotel extends Model
{
  use Billable, HasFactory;

  public $incrementing = false;
  protected $fillable = [
    'id',
    'name',
    'user_id',
  ];
   .............

出现此错误是因为您从 User 模型中删除了 Billable 特征并将其移至 Hotel 模型

那么在这种情况下,您需要根据模型关系做什么 (one -> many)

用户模型

class User extends Authenticatable implements CanResetPassword {

 use Notifiable, HasSanctumTokens, HasFactory;

 protected $fillable = [
  'email',
  'password',
  'lang',
 ];

 public function hotels()
 {
    return $this->hasMany(Hotel::class);
 }

之后,您需要从控制器传递 hotel 作为参数而不是 user

控制器

public function get(Request $request, Hotel $hotel)
{
    $stripeUser = $hotel->createOrGetStripeCustomer();
    .............
}