php - 在 OR 上下文中使用多个 Laravel 作用域

标签 php laravel eloquent

我的 Laravel 应用程序中有一个包含 start_dateend_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/

相关文章:

Php - 算出现在是哪个学年

regex - 工作正则表达式在 Laravel 验证中不起作用

php - Laravel 5 急切加载从外键中删除前导零

php - Laravel 5.2 用户表中的额外列

php - 取消 Laravel 中的作业

PHP 每 100 行中每 10 行读取一次

php不打印数据库信息

javascript - Vue挂载组件失败: template or render function not defined

php - Laravel 在用户模型中通过 id 获取用户并将它们存储在数组中

php - 如何在 laravel 中使用 hasMany 关系制作更新页面