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();
更多信息

您可以仅使用范围