我的 Laravel 应用程序中有一个包含 start_date
和 end_date
属性的订阅模型。我创建了两个查询范围,scopeActive 和 scopeFuture 以(分别)查找事件订阅和 future 订阅。
我想知道如何在 OR 上下文中使用两个范围构建查询,以便我可以找到任何事件或 future 的订阅。
订阅模式
/**
* 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');
}
Controller
Subscription::active()->get();
最佳答案
对于静态上下文尝试:
$subscriptions = Subscription::query()
->active()
->orWhere(function ($query) {
$query->future();
})
->get();
First call
query()
to prevent errors (because we may have a non-static method with "active
" as name).
关系查询(按评论要求)
$subscriptions = auth()->user()
->business()
->subscriptions()
->active()
->orWhere(function ($query) {
$query->future();
})
->get();
Note that above we don't need to call
query()
(because it's not from static-context).
关于php - 在 OR 上下文中使用多个 Laravel 作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44098385/