@bubji9

Как можно улучшить метод?

Задача вывести на страницу все товары из таблицы товаров и для каждого товара его категории. Связь многие ко многим.
Есть контроллер ProductController,в нем код:
public function getPart()
    {
        $cat2prod = [];
        $idArr = [];
        $result= Product::paginate(8)->toArray();
        foreach ($result['data'] as $productInfo) {
            $idArr[] = $productInfo['id'];
        }
        $products = Product::find($idArr);
        foreach ($products as $product){
            $cat2prod[$product['id']] = $product->categories->toArray();
        }
        foreach ($result['data'] as $ind => $productInfo) {
            $result['data'][$ind]['categories'] = $cat2prod[$productInfo['id']];
        }

        return $result;


Модель :
class Product extends Model
{
    public function categories()
    {
        return $this->belongsToMany('App\Category','product_categories');
    }

}


Сейчас все работает контроллер отдает нужный массив но к базе выполняется 11 запросов. Хотелось бы узнать как можно улучшить метод не меняя структуру ответа.

$result= Widget::with('categories')->paginate(8); - помогло.
  • Вопрос задан
  • 150 просмотров
Решения вопроса 1
@vanillathunder
Лучше использовать with.
$result = Product::paginate(8)->with('categories')->toArray();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы