большой запрос с учетом и порядком - PullRequest
1 голос
/ 28 апреля 2020

У меня довольно тяжелый запрос, который достигает предела памяти и возвращает ошибку 500, вот запрос:

       $collection = User::with('city')
            ->withCount('userReferral')
            ->orderByDesc('user_referral_count')
            ->get();

        $data  = $collection->where('username', $userName);

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

Ответы [ 2 ]

3 голосов
/ 28 апреля 2020

Вам не следует указывать, где находится коллекция, а запускать ее напрямую с помощью eloquent.

$collection = User::with('city')
        ->withCount('userReferral')
        ->orderByDesc('user_referral_count')
        ->where('username', $userName)
        ->get();

// Do something with your collection

Если вам не нужны все пользователи одновременно, вы также можете использовать нумерацию страниц .

$collection = User::with('city')
        ->withCount('userReferral')
        ->orderByDesc('user_referral_count')
        ->where('username', $userName)
        ->paginate(10);
1 голос
/ 28 апреля 2020

Хороший вариант - всегда использовать limit и использовать нумерацию страниц, ленивую загрузку или другие способы отображения результатов по частям, а не извлекать их все сразу.

Другой способ оптимизации запрос состоит в том, чтобы select ТОЛЬКО нужные поля, а не все.

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