php – 如何(以及在​​何处)在Laravel中注册自定义查询方法

在我的应用程序中,我需要检索在过去7天内注册的用户.后来我意识到我还需要检查30天和365天等等.所以我在User.php中写了一个查询范围:

public function scopeCreatedWithinDays($query,$day){
    $str = $day.' days ago';
    $carbon = new Carbon($str);
    $query->where('created_at', '>=', $carbon);
}

我突然意识到这种方法适合所有模型重复使用.因此,我需要在一个公共位置定义此方法,以便通过简单地调用$anyModel-> createdWithinDays(30)轻松获取最近x天内创建的行.但我不知道在哪里放以及如何……

解决方法:

还可以选择在查询生成器上宏方法:

\Illuminate\Database\Query\Builder::macro('createdWithinDays', function ($day) {
    return $this->where('created_at', '>=', new \Carbon\Carbon($day .' days ago'));
});

现在,您应该将该方法用于涉及Query Builder的任何查询,其中包括所有Eloquent查询.

没有继承,没有特征,没有任何模型的更改,你也可以从DB ::中使用这个方法.

AnyModel::createdWithinDays(4)->get();
DB::table('blah')->createdWithinDays(4)->get();

抱歉..’和where’部分:将宏添加到Service Provider引导方法.

上一篇:c – 为字符串输入特征


下一篇:php – 我可以在特质中使用父类的属性吗?