nor*_*orr 2 scope laravel laravel-5.5
我有多个带有时间戳的模型。我经常使用whereDate获取今天和昨天的所有行,如下所示:
ModelName::whereDate('created_at', now()->today())->get();
ModelName::whereDate('created_at', now()->yesterday())->get();
Run Code Online (Sandbox Code Playgroud)
我想让它更短,更简单,例如:
ModelName::today()->get();
ModelName::yesterday()->get();
Run Code Online (Sandbox Code Playgroud)
我找不到执行此操作的任何方法,因此我在文档中发现可以创建自己的“作用域”。问题是,我可以为指定的模型制作模型,但是找不到为所有模型全局制作模型的方法。现在,我需要将此作用域方法粘贴到每个模型类中。这行得通,但是我需要在每个模型类中重复此代码,所以我确定这不是一个好方法。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class ModelName extends Model
{
/**
* Custom scope (query builder method) to easy return all items from today
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeToday($query)
{
return $query->whereDate('created_at', now()->today());
}
/**
* Custom scope (query builder method) to easy return all items from yesterday
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeYesterday($query)
{
return $query->whereDate('created_at', now()->yesterday());
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在特征中定义本地范围:
<?php
namespace App\Traits;
trait Scopes
{
public function scopeToday($query)
{
return $query->whereDate('created_at', now()->today());
}
public function scopeYesterday($query)
{
return $query->whereDate('created_at', now()->yesterday());
}
}
Run Code Online (Sandbox Code Playgroud)
然后在您喜欢的任何模型中使用特征:
use App\Traits\Scopes;
Run Code Online (Sandbox Code Playgroud)
并使用特征:
ModelName::today()->get();
ModelName::yesterday()->get();
Run Code Online (Sandbox Code Playgroud)
做到这一点的另一种方法是创建和扩展基础模型类,并在那里定义范围,但我将使用特征。
| 归档时间: |
|
| 查看次数: |
3005 次 |
| 最近记录: |