Laravel Eloquent медленно загружается - PullRequest
0 голосов
/ 24 ноября 2018

есть много похожих тем, но я не смог найти решение для меня.Этот запрос загружается очень медленно.

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 голосов
/ 26 ноября 2018

Когда у вас большой объем данных, лучше использовать кэширование на стороне сервера.Это значительно повысит производительность.

Шаг 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, или вы можете использовать метод фильтра сбора для реализации дополнительной логики фильтра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...