2016-04-24 29 views
1

我正在对正确的MVC进行重构,并将所有业务逻辑移至我的模型。但是,在某些情况下,这会导致显着的性能下降。与存储库访问相比,Laravel集合过滤速度较慢

我的模型“用户”与模型“日志”有着许多关系。我的用户模型中有一个特定的函数,它返回某个日期之间的日志。我过滤收集这样的:

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

它可能与Eloquent如何管理检索关系有关。我想保留在我的用户模型中的代码,但不是性能下降。有人知道这个表现的下降究竟是从哪里来的,我该如何解决这个问题?

回答

1

过滤集合意味着您从数据库中读取所有内容,为每个记录创建对象,然后进行过滤。这是很正常的,它需要更多的时间。不管架构如何,解决方案都是使用Eloquent过滤来完成第二种方式。

相关问题