Criar método personalizado do construtor de consultas (escopo da consulta) para todos os modelos no Laravel 5.5
Eu tenho vários modelos, todos com timestamps. Costumo usar whereDate para obter todas as linhas de hoje e de ontem, assim:
ModelName::whereDate('created_at', now()->today())->get();
ModelName::whereDate('created_at', now()->yesterday())->get();
Quero tê-lo mais curto, mais simples, como:
ModelName::today()->get();
ModelName::yesterday()->get();
Não consigo encontrar nenhum método para fazer isso, então encontrei na documentação que posso criar "escopos" próprios. O problema é que posso fazê-lo para o modelo especificado, mas não consigo encontrar uma maneira de fazê-lo globalmente, para todos os modelos. Agora eu preciso colar esse método de escopo em todas as classes de modelo. Isso funciona, mas preciso repetir esse código em todas as classes de modelo, portanto, não é uma boa maneira de fazer isso, tenho certeza.
<?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());
}
}