8

私は少し困惑しています。ユーザー(実際には「顧客」)モデルに、ユーザーのサブスクリプション更新日を返す簡単なメソッドがあります。

public function subscriptionRenewalDate() : string
{
    $subscription = $this->subscriptions()->active()->first()->asStripeSubscription();

    return Carbon::createFromTimeStamp($subscription->current_period_end)->format('F jS, Y');
}

{{ auth()->user()->subscriptionRenewalDate() }}ブレード テンプレート ( )から認証済みユーザーに対してこのメ​​ソッドを呼び出すと、ローカルでは正常に動作しますが、リモート ステージング サーバーにアップロードするとすぐに次のエラーで失敗します。

名前が既に使用されているため、クラス App\Models\Customer を宣言できません

Customer モデルの次の行を指しています。

class Customer extends Authenticatable
{

奇妙なのは、リモート ステージング サーバーだけでなく、失敗した Travis CI でもあることです (PHPUnit テストを実行すると、これらの同じテストがローカルで正常に動作します)。

明らかに、何らかのキャッシングまたは構成の問題のようですが、このエラーの原因がわかりません。

テストは を使用するため、データベース関連ではありませんRefreshDatabase。ENV 変数 ( ) を削除するCASHIER_MODEL: App\Models\Customerと、予想される「モデル ユーザーが見つかりません」というエラーで失敗するため、ENV 変数を正しく取得しています。Laravel キャッシュ ( php artisan optimize:clear) とcomposer dump-autoload. とても紛らわしいです。

私が知っているのは、エラーの原因がasStripeSubscription(). メソッドからそれを削除すると、ブレード テンプレートは正常に読み込まれます (すべて正常に動作します)。

明確にするために、私は成功することができます (これはローカル、リモート、および Travis CI で行われます):

  • ララベルに登録する
  • Laravelにログイン
  • 私のパスワードをリセットする
  • 個人情報の更新
  • Stripe サブスクリプションに登録するには、支払い情報を入力してください
  • Stripe サブスクリプションの表示と変更
  • Stripe.com ですべての顧客情報とサブスクリプション情報を確認する
  • Stripe.com で自分の情報を編集し、自分のサーバーの Webhook を介して更新されたことを確認します

asStripeSubscription()問題があるのは、コードに が現れるときだけです。そして、それはリモートサーバー上にのみあります. ローカルでも問題なく動作します。

この呼び出しをさまざまなモデルに移動してみました。コントローラーから呼び出して、結果をビューに渡そうとしました。サーバーを再起動して、Travis CI のキャッシュをクリアすることも試しました。エラーは同じままです。

asStripeSubscription()このエラーが発生する原因は何ですか? ローカルでレプリケートできれば、デバッグできます。ローカルで完璧に動作することを頑固に主張しますが、リモートでは失敗します。

Laravel 8、PHP 7.3、Cashier 12.10 を使用しています。

Cannot declare class App\Models\Customer, because the name is already in use何がエラーにつながるのかを理解することはできません。


スタックトレース:

Laravel.log から:

[2021-03-22 10:29:23] production.ERROR: 名前が既に使用されているため、クラス App\Models\Customer を宣言できません {"userId":1127215,"exception":"[object] (Symfony\ Component\ErrorHandler\Error\FatalError (コード: 0): 名前が /var/app/current/app/Models/Customer.php:13 で既に使用されているため、クラス App\Models\Customer を宣言できません) [stacktrace]

ここに画像の説明を入力

4

3 に答える 3