Laravel雄辩的负载缓慢

时间:2018-11-24 02:07:05

标签: php laravel-5.6

有很多类似的主题,但找不到适合我的解决方案。该查询加载速度非常慢。

public function getAllBids()
{

    return Bid::with('user', 'group')
        ->join('auct_lots', function ($join) {
            $join->on('bids.lot_id', '=', 'auct_lots.lot_id')
                    ->where('auct_lots.company', 'LIKE', '%' . request('brand') . '%')
                    ->where('auct_lots.model_name', 'LIKE', '%' . request('models') . '%')
                    ->where('auct_lots.grade_en', 'LIKE', '%' . request('carGrade') . '%')
                    ->where('auct_lots.auction_name', 'LIKE', '%' . request('auctions') . '%')
                    ->where('auct_lots.model_type_en', 'LIKE', '%' . request('chassis') . '%')
                    ->where('auct_lots.bid', 'LIKE', '%' . request('lots') . '%')
                    ->where('auct_lots.lot_date', 'LIKE', '%' . request('date') . '%');
        })
        ->orderBy('auct_lots.' . request('order_column'), request('order_type'))
        ->paginate(30);

}

我认为问题是auct_lots拥有40,000多个记录...但是我不确定如何重构此代码以更快地工作。

1 个答案:

答案 0 :(得分:1)

当您有大量数据时,最好使用服务器端缓存。这样可以更快地提高性能。

第1步:创建特性并为缓存中的存储值编写逻辑。 例如:

trait Student{
  public function storeStudentDataInCache(){
       $students = Cache::rememberForever('studentList', function () {
        return Student::
        with(['class', 'exams'])
        ->where('is_published', 1)->orderBy('display_sequence', 'ASC')->get();
        });
    return $students;
    }
}

现在在您的控制器中调用此方法,它将返回数据收集。因此,您不需要一直运行sql查询来获取数据。此方法将仅在一次后运行查询。之后,数据将存储在缓存中,因此它将从缓存文本文件中获取数据的集合。

注意:每当您更新数据时,请不要忘记删除此缓存。

您还可以在laravel收集条件的地方应用,或者可以使用收集的filter方法来实现更多的过滤逻辑。