我通过控制器方法为访问者模型应用了一些过滤器。
$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)创建一个帮助文件
答案 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();
更多信息