我正在将我的应用程序重构成适当的MVC,并将我所有的业务逻辑转移到我的模型中。然而,在某种情况下,这会导致明显的性能下降。
我的模型‘用户’和模型‘日志’有很多关系。在我的用户模型中有一个函数在某个日期之间返回它的日志。我像这样过滤集合:
public function getLogsBetweenDates($start, $end) {
$logs = $this->logs
->filter(function($value, $key) use ($start, $end) {
return $value->log_date >= $start && $value->log_date <= $end;
});
return $logs
}这是可行的,但比我以前的实现要慢得多,之前的实现是在我的控制器中访问我的LogRepository。
public function getLogsBetweenDateFromUser($start_date, $end_date, $user_id)
{
$start = Carbon::parse($start_date);
$end = Carbon::parse($end_date);
return Log::where('user_id', $user_id)
->where('log_date', '>=' , $start)
->where('log_date', '<=' , $end)
->get();
}这可能与雄辩如何管理检索关系有关。我希望将代码保留在我的用户模型中,但不希望性能下降。有人知道这个性能下降的确切来源吗?我是如何解决这个问题的?
发布于 2016-04-24 10:36:14
筛选集合意味着从数据库读取所有内容,为每个记录创建对象,然后进行筛选。这是正常的,它需要更多的时间。解决方案,无论架构,是采取第二种方式,使用雄辩的过滤。
https://stackoverflow.com/questions/36819652
复制相似问题