如何用新方法扩展Laravel模型,集合?

时间:2019-01-25 14:41:10

标签: 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($datePeriod)]);
}

$count = Visitor::where($filterRules)->count();

它可以正常工作,但是现在我有了另一个控制器,需要在其中将相同的过滤器应用于Visitor模型,而且我不想重复代码。

移动此代码的最佳位置在哪里?

a)向模型(Visitor.php)添加新方法

b)创建一个帮助文件

1 个答案:

答案 0 :(得分:3)

您可以为此使用Elouquent Scope。这是一个示例

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();

更多信息

https://laravel.com/docs/5.6/eloquent#query-scopes