Haga un método de generador de consultas personalizado (ámbito de consulta) para todos los modelos en Laravel 5.5
Tengo varios modelos, todos con marcas de tiempo. A menudo uso whereDate para obtener todas las filas de hoy y ayer, de esta manera:
ModelName::whereDate('created_at', now()->today())->get();
ModelName::whereDate('created_at', now()->yesterday())->get();
Quiero que sea más corto, más simple, como:
ModelName::today()->get();
ModelName::yesterday()->get();
No puedo encontrar ningún método para hacer esto, así que encontré en la documentación que puedo hacer mis propios "ámbitos". El problema es que puedo hacerlo para el modelo especificado, pero no puedo encontrar una manera de hacerlo globalmente, para todos los modelos. Ahora necesito pegar estos métodos de alcance en cada clase de modelo. Esto funciona, pero necesito repetir este código en cada clase de modelo, así que no es una buena manera de hacerlo, estoy seguro.
<?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());
}
}