我有一个订阅模型,其中包含start_date
and end_date
我的 Laravel 应用程序中的属性。我创建了两个查询范围,scopeActive 和scopeFuture(分别)来查找活动订阅和未来订阅。
我想知道如何在 OR 上下文中使用两个范围构建查询,以便我可以找到任何活动或未来的订阅。
订阅模式
/**
* Scope a query to only include active subscriptions.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeActive($query)
{
return $query->where('start_date', '<', Carbon::now())
->where('end_date', '>', Carbon::now());
}
/**
* Scope a query to only include future subscriptions.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeFuture($query)
{
return $query->where('start_date', '>', Carbon::now());
}
public function business()
{
return $this->belongsTo('App\Business');
}
商业模式
.....
public function subscriptions()
{
return $this->hasMany('App\Subscription');
}
用户模型
public function business()
{
return $this->hasOne('App\Business');
}
控制器
Subscription::active()->get();
对于静态上下文尝试:
$subscriptions = Subscription::query()
->active()
->orWhere(function ($query) {
$query->future();
})
->get();
第一次通话query()
防止错误(因为我们可能有一个带有“的非静态方法”active
“作为名称)。
Relation query (as requested in the comment)
$subscriptions = auth()->user()
->business()
->subscriptions()
->active()
->orWhere(function ($query) {
$query->future();
})
->get();
Note上面我们不需要调用query()
(因为它不是来自静态上下文)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)