Php 如何用新方法扩展Laravel模型、集合?
我在控制器方法中为访问者模型应用了一些过滤器Php 如何用新方法扩展Laravel模型、集合?,php,laravel,Php,Laravel,我在控制器方法中为访问者模型应用了一些过滤器 $filterRules = array(); array_push($filterRules, ['shop_id', '=', $storeId]); if ($datePeriod == '0' ) { // calc all period } else { array_push($filterRules, ['created_at', '>=', Carbon::now()->subMinutes($dateP
$filterRules = array();
array_push($filterRules, ['shop_id', '=', $storeId]);
if ($datePeriod == '0' )
{
// calc all period
} else {
array_push($filterRules, ['created_at', '>=', Carbon::now()->subMinutes($datePeriod)]);
}
$count = Visitor::where($filterRules)->count();
它工作正常,但现在我有了另一个控制器,我需要将相同的过滤器应用于访问者模型,我不想重复代码
移动此代码的最佳位置是哪里
a) 向模型中添加一个新方法(Visitor.php)
或
b) 创建一个助手文件您可以为此使用雄辩的作用域。这里有一个例子
public function scopeFilterRules($query, $storeId)
{
$filterRules = array();
array_push($filterRules, ['shop_id', '=', $storeId]);
if ($datePeriod == '0' ) {
// calc all period
} else {
array_push($filterRules, ['created_at', '>=', Carbon::now()->subMinutes($datePeriod)]);
}
return $query->where($filterRules);
}
现在,您可以在应用程序中的任何位置使用它
Visitor::filterRules($storeid)->count();
更多信息
您可以仅使用范围