Tan*_*may 5 php oop code-reuse traits laravel
在我的应用程序中,我需要检索过去 7 天内注册的用户。后来我意识到我还需要检查30天和365天等等。所以我在我的 User.php 中写了一个查询范围:
public function scopeCreatedWithinDays($query,$day){
$str = $day.' days ago';
$carbon = new Carbon($str);
$query->where('created_at', '>=', $carbon);
}
Run Code Online (Sandbox Code Playgroud)
我突然意识到,这种方法非常适合在所有模型中重复使用。所以我需要在一个共同的地方定义这个方法,这样我就可以x通过简单地调用$anyModel->createdWithinDays(30). 但我不知道把它放在哪里以及如何...
还可以选择在查询生成器上对方法进行宏处理:
\Illuminate\Database\Query\Builder::macro('createdWithinDays', function ($day) {
return $this->where('created_at', '>=', new \Carbon\Carbon($day .' days ago'));
});
Run Code Online (Sandbox Code Playgroud)
现在,您应该可以将该方法用于任何涉及 Query Builder 的查询,其中包括所有 Eloquent 查询。
没有继承,没有特征,没有改变任何模型,你也可以使用这种方法DB::。
AnyModel::createdWithinDays(4)->get();
DB::table('blah')->createdWithinDays(4)->get();
Run Code Online (Sandbox Code Playgroud)
抱歉.. 'and where' 部分:将宏添加到服务提供者boot方法。
| 归档时间: |
|
| 查看次数: |
1453 次 |
| 最近记录: |