所以我有两个模型,User和Website。
我也在使用Laravel收银机,它使用条纹作为订阅。
关系我的User模型:
public function websites() {
return $this->hasMany('App\Models\Website');
}我的Website模型中的关系:
public function user() {
return $this->belongsTo('App\User');
}同样在我的Website模型中:
public function scopeNeedsUpdate($query) {
$query->whereRaw('last_queued <= DATE_SUB(NOW(), INTERVAL 12 HOUR)')->orderBy('created_at', 'desc');
}范围是我得到需要排队的网站的地方。然而,我需要添加一个条件,它将只返回一个网站是last_queued <= 12小时和相关的User有一个活跃的订阅。
我真的不知道怎样才能用雄辩的口才来达到这个目的。不管我怎么试,结果都太乱了。
发布于 2016-03-24 03:21:18
为了检查具有某些自定义属性的关系是否存在,可以使用闭包进行限制你急切的负载。由于您希望检查具有active Stripe订阅的用户,最好将该逻辑移动到用户模型上的范围,然后在闭包中引用范围:
用户模型:
public function scopeSubscribed($query) {
return $query->where('stripe_active', 1)
->where(function($q) {
$q->where('subscription_ends_at', null)
->orWhere('subscription_ends_at', '>', DB::raw('NOW()'));
});
}这意味着您现在可以有一个干净的查询。
Website::whereHas('user', function($query){
$query->subscribed();
})->needsUpdate()->get();请注意,这是针对Laravel5.0的。从那时起,收银员发生了很大的变化,这条线有一个很好的解决方案,可以将subscribed变成5.2的范围。
https://stackoverflow.com/questions/36192514
复制相似问题