Задача вывести на страницу все товары из таблицы товаров и для каждого товара его категории. Связь многие ко многим.
Есть контроллер 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); - помогло.