Laravel eloquent оптимизация

196
08 января 2019, 03:10

Недавно понадобилось извлечь из таблицы 1600 товаров + из отдельной таблицы артикулы + бренды из тоже отдельной таблицы. Казалось бы сделал что нибудь вроде Products::with('sku')->get(); и вроде бы вся проблема.

Но laravel конвертирует все в объекты... А это очень серьезно замедляет. Замедляет настолько, что выдача 1600 товаров занимает 22 секунды...

Я просто хочу получить массив данных, не создавая объекты. Как мне этого избежать?

И сразу еще 1 вопрос, если я хочу получить, к примеру, айдишники продуктов сразу в виде массива, тоже не создавая объекты, как это сделать?

Просто привидите пример, я уже 4 часа тыкаюсь по документациям, далеко не продвинулся

Answer 1
Products::with('sku')->first();

ето вернет тебе не object; можеш делать так

$product = Products::with('sku')->first();
$product->phone //столбец  product из sql
Answer 2

Если на страницу попадает в итоге только 10 записей то используй skip() и take() для выборки из базы только этих значений и их выводи, только, скорее всего тебе надо будет перенастроить твою таблицу на серверный рендеринг. Второй вопрос, чтобы получить только массив каких то значений надо в конце запроса писать ->pluck() и будет массив значений.

READ ALSO
Использование GET параметра в форме php

Использование GET параметра в форме php

Интересует следующий вопрос: есть форма авторизации в файле indexphp, как сделать так, чтобы эта форма стала доступной после введения GET параметр?

196
Можно ли получить список timezone -ов из класса Carbon?

Можно ли получить список timezone -ов из класса Carbon?

Как видно конструктор класса Carbon принимает параметр timezone

161
Мистика с max_execution_time

Мистика с max_execution_time

Уважаемые программисты, прошу помочьТанцы с бубном которые решаю уже 4 дня

173
Undefined reference существующей функции?

Undefined reference существующей функции?

Цель - собрать код с использованием OpenCASCADE (OCE) c crosscompile под windowsДля этого использую mxe с пакетом oce

205