2016-10-17 11 views
0

は、私は次のエラーを取得する:Laravelのキャッシャー、エラーチェックをサブスクリプションのステータス

$user = User::where('id', '=', \Auth::user()->id)->first(); 

if ($user->subscribed('main')) <-- error 

エラー:

ErrorException in Builder.php line 2405: Call to undefined method 
    Illuminate\Database\Query\Builder::valid() (View: /var/www/html... 

in Builder.php line 2405 
at Builder->__call('valid', array()) 
at Builder->valid() 
at call_user_func_array(array(object(Builder), 'valid'), array()) in Builder.php line 1426 
at Builder->__call('valid', array()) 
at Builder->valid() 
at call_user_func_array(array(object(Builder), 'valid'), array()) in Relation.php line 343 
at Relation->__call('valid', array()) in Billable.php line 172 
at HasMany->valid() in Billable.php line 172 
at User->subscribed('main') in BillingsController.php line 58 
at BillingsController->index() 

私が使用してすべての問題を得ることはありません$user->onGenericTrial()$user->onTrial()のメソッドが同じビューにあります。

$user = User::find(1); 
$user->newSubscription('main', 'monthly')->create($creditCardToken); 

私はLaravel 5.2とレジ6.0を使用しています:

私が使用して、新しいサブスクリプションを作成しました。私はここにdocsに従ったhttps://laravel.com/docs/5.2/billing#checking-subscription-status

私のユーザーモデルでは、Laravel \ Cashier \ Billableを使用します。 Billableを使用します。私のサブスクリプションモデルでhasMany。私のサブスクリプションモデルは、belongsToのユーザ関係に

Userモデル

<?php namespace App; 

use Laravel\Cashier\Billable; 

use Carbon\Carbon; 

class User extends Model implements AuthenticatableContract, AuthorizableContract, CanResetPasswordContract { 

    use Authenticatable, Authorizable, CanResetPassword; 

    public $incrementing = true; 

    use SoftDeletes; 

    use Billable; 

    protected $dates = ['deleted_at']; 

    protected $table = 'users'; 

    protected $fillable = [ ... 'stripe_id', 'card_brand', 'card_last_four', 'trial_ends_at']; 


    public function subscription() 
    { 
     return $this->hasMany('App\Subscription'); 
    } 

    public function getTrialEndsAtAttribute($value) 
    { 
     $format = $this->getDateFormat(); 
     return Carbon::createFromFormat($format, $value, 'UTC')->setTimezone(\Helper::getTimezone()); 
    } 

エラーが発生した場所ですがあります

https://github.com/laravel/cashier/blob/6.0/src/Billable.php

public function subscribed($subscription = 'default', $plan = null) 
{ 
    $subscription = $this->subscription($subscription); 
    if (is_null($subscription)) { 
     return false; 
    } 
    if (is_null($plan)) { 
     return $subscription->valid(); 
    } 
    return $subscription->valid() && 
      $subscription->stripe_plan === $plan; 
} 

ソリューション:最後に

FOそして問題!ユーザーモデルとサブスクリプションモデルの間に関係を作成してはいけません。サブスクリプションモデルのユーザーモデルとbelongsTo関係にhasMany関係がありました。それが問題でした。

+0

あなたのユーザーモデルを投稿できますか? – Birdy

+0

完了しました。ユーザーモデルが追加されました – user3489502

答えて

1

あなたがしようとすると実行できます。完全なオブジェクトがインスタンス化されていない場合を照らしクエリビルダは、未定義のメソッドを投げることができるので、これは同じエラーをスローした場合

$user->first()->subscribed('main'); 

は参照してください、これを尋ねる理由イムです。

私はこの問題をいくつかの機会に自分自身に直面していますが、今日私がどのように似たような問題を克服しているかの例を教えてください。

リターン$user->payments()->first()->fetchMostRecent($customArrayValues)->first();

また、あなたの$user->subscription();$user->subscription()->first();リターンを何、この機能が期待されているものを返すのでしょうか?

私は、私はlaravelのプロではないと言っていましたが、できる限りのことをやっていきたいと思っています。質問者のエラー例外として、裏側の痛み!

+0

@Birdy、$ user-> first() - > subscribed( 'main'); '同じエラーが表示されました。 '$ user'です。 '$ user-> subscription();'では、Userデータを取得しますが、Subscriptionは空です。 – user3489502

+0

今日はこれがRIの問題だったかもしれないと思ったが、すべてがうまくいくように見える。この '$ user-> subscription() - > first() - > first()'を試してみましたが、サブスクリプションモデルが請求可能な特性を使用していないので、 '定義されていないメソッドを呼び出して\ Database \ Query \ Builder :: subscribed()'を呼び出します。私のサブスクリプションモデルで、 'use Laravel \ Cashier \ Billable;'と 'Billable;を使うと' dd($ user-> subscription() - > first() - >サブスクライブ( 'main')) '。 – user3489502

+0

しかし、そこに行くにはちょっとファンキーなコードだし、Laravel/Cashierの意図ではないと確信している。ドキュメント[here](https://laravel.com/docs/5.2/billing#stripe-configuration)に、Billableの特性をUserモデルに追加する必要があります。 – user3489502

関連する問題