Laravel группировка по нескольким уровням - PullRequest
0 голосов
/ 27 апреля 2020

Как GROUP BY несколько уровней в Laravel. Я пробовал этот код.

Я также использовал toArray(), затем array_values(), но тот же результат, что и values()

РЕДАКТИРОВАТЬ: Извините, я написал value () вместо values ​​()

При использовании значений () product_name не отображается.

// Controller
$products = DB::table('product_registrations')
    // ->select(['product_name', 'color'])
       ->join('colors', 'colors.id', '=', 'product_registrations.color_id')
       ->join('sizes', 'sizes.id', '=', 'product_registrations.size_id')
       ->join('products', 'products.id', '=', 'product_registrations.product_id')
       ->get()
       ->groupBy(['product_name', 'color']);
       // ->values(); // I've used values(), it worked but first level groupBy name missing

return response()->json(['products' => $products]);

---

I want something like: 

products: [
    product1: [
        color1: {},
        color2: {}
    ]
]

без значений ()

{
    "products": {
        "light blue dress": {
            "Ягаан": [
                {
                    "id": 1,
                    "product_id": 1,
                    "color_id": 1,
                    "size_id": 6,
                    "color": "Ягаан",
                    "product_name": "light blue dress",
                }
            ],
        },
    }
}

со значениями ()

{
    "products": [
        {
            "Ягаан": [
                {
                    "id": 1,
                    "product_id": 1,
                    "color_id": 1,
                    "size_id": 6,
                    "color": "Ягаан",
                    "product_name": "light blue dress",
                }
            ],
        }
    ]
}

1 Ответ

0 голосов
/ 27 апреля 2020

Попробуйте это. У меня также есть проблемы на прошлой неделе, но мне удается пройти.

$products::latest()->get();

$products = products->groupBy(function($product) {
  return $product->name;
});

$products = products->map(function($product) {
  return $product->groupBy(function($prod) {
    return $prod->color;
  });
});

return $products;

Вы также можете оптимизировать этот метод с помощью array_only, этот метод только для laravel

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