首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有用户关系以检查订阅的Laravel范围

具有用户关系以检查订阅的Laravel范围
EN

Stack Overflow用户
提问于 2016-03-24 02:57:03
回答 1查看 1.7K关注 0票数 2

所以我有两个模型,UserWebsite

我也在使用Laravel收银机,它使用条纹作为订阅。

关系我的User模型:

代码语言:javascript
复制
public function websites() {
    return $this->hasMany('App\Models\Website');
}

我的Website模型中的关系:

代码语言:javascript
复制
public function user() {
    return $this->belongsTo('App\User');
}

同样在我的Website模型中:

代码语言:javascript
复制
public function scopeNeedsUpdate($query) {
    $query->whereRaw('last_queued <= DATE_SUB(NOW(), INTERVAL 12 HOUR)')->orderBy('created_at', 'desc');
}

范围是我得到需要排队的网站的地方。然而,我需要添加一个条件,它将只返回一个网站是last_queued <= 12小时和相关的User有一个活跃的订阅。

我真的不知道怎样才能用雄辩的口才来达到这个目的。不管我怎么试,结果都太乱了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-24 03:21:18

为了检查具有某些自定义属性的关系是否存在,可以使用闭包进行限制你急切的负载。由于您希望检查具有active Stripe订阅的用户,最好将该逻辑移动到用户模型上的范围,然后在闭包中引用范围:

用户模型:

代码语言:javascript
复制
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()'));
                 });
}

这意味着您现在可以有一个干净的查询。

代码语言:javascript
复制
Website::whereHas('user', function($query){
    $query->subscribed();
})->needsUpdate()->get();

请注意,这是针对Laravel5.0的。从那时起,收银员发生了很大的变化,这条线有一个很好的解决方案,可以将subscribed变成5.2的范围。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36192514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档