我有多个模型,都带有时间戳。我经常使用whereDate来获取今天和昨天的所有行,如下所示:
ModelName::today()->get();
ModelName::yesterday()->get();
我想让它更短,更简单,如:
<?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());
}
}
我找不到任何方法来做到这一点,所以我在文档中发现我可以制作自己的&#34;范围&#34;。问题是,我可以为指定的模型制作它,但我无法找到一种方法来为所有模型全局制作它。现在我需要在每个模型类中粘贴这个范围方法。这是有效的,但我需要在每个模型类中重复这个代码,所以这不是一个很好的方法,我确定。
myFunctionToSetState = (propertyName) => {
//I want to use the string I pass as the key in my new object
this.setState({ propertyName: newValue});
}
//I'm calling the function like this
this.myFunctionToSetState('myPropertKey');
答案 0 :(得分:4)
您可以在特征中定义local scopes:
mav.addObject("lRetailers",lRetailers);
然后在您喜欢的任何模型中使用特征:
<?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());
}
}
并使用特征:
use App\Traits\Scopes;
另一种方法是创建和扩展基础模型类并在那里定义范围,但我使用了特征。