流明 - 过滤所有选择方法的一些结果

时间:2017-04-29 15:42:30

标签: php mysql laravel eloquent lumen

我在数据库中有一个expired_at列;在创建任何行时,默认情况下将是创建时间的未来5分钟,并且我想要排除expired_at已经过去的行(从当前时间开始)。

例如,我在games表中有这些行:

id creator_id created_at            updated_at            expire_at  
1  123456789  2017-04-26 01:13:22   2017-04-26 01:13:22   2017-04-26 01:18:22  
2  234567890  2017-04-26 01:16:06   2017-04-26 01:16:06   2017-04-26 01:21:06  

当我在时间Game::all()获取Game::where('condition')01:19:30函数的所有行时,第1行不应被提取,但第2行应该,因为它仍未过期。

我不想在目标代码中处理过期时间,但是在模型代码中(例如覆盖模型类中的函数)

1 个答案:

答案 0 :(得分:1)

你可以通过(全局)范围实现这一目标。

另请参阅this链接。

protected static function boot()
{
    parent::boot();
    static::addGlobalScope('not_expired', function (Builder $builder) {
        $builder->where('expired_at', '>', Carbon::now());
    });
}

全局范围将应用于所有查询,除非您专门禁用它们。

禁用它们可以通过以下方式完成:

Game::withoutGlobalScope('not_expired')->all();