は、私は次のエラーを取得する: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関係がありました。それが問題でした。
あなたのユーザーモデルを投稿できますか? – Birdy
完了しました。ユーザーモデルが追加されました – user3489502