Size: a a a

Laravel Framework Russian Community

2020 July 10

VU

Vlad Umrikhin in Laravel Framework Russian Community
'attribute_id', 'product_id'
         1                           1
         1                            2

Мне такой формат не нужен был, правильно @lmboom указал
источник

VU

Vlad Umrikhin in Laravel Framework Russian Community
только набор конкретных id атрибутов, 3 5 7 12
источник

SG

Sergey Gerasimov in Laravel Framework Russian Community
Vlad Umrikhin
нет, такого быть не может
Тогда обычный SELECT без DISTINCT дал бы аналогичный результат без дублей
источник

SG

Sergey Gerasimov in Laravel Framework Russian Community
Vlad Umrikhin
$attributesProducts = AttributeProduct::whereIn('product_id', $productsId)->selectRaw('attribute_id')->with(['attribute'])->distinct('attribute_id')->get();
Кстати, вроде сработало
И у distinct нет параметра
источник

VU

Vlad Umrikhin in Laravel Framework Russian Community
Sergey Gerasimov
Тогда обычный SELECT без DISTINCT дал бы аналогичный результат без дублей
AttributeProduct::whereIn('product_id', $productsId)->selectRaw('attribute_id')->get();

неа, почему-то есть дубли...
источник

SG

Sergey Gerasimov in Laravel Framework Russian Community
Vlad Umrikhin
AttributeProduct::whereIn('product_id', $productsId)->selectRaw('attribute_id')->get();

неа, почему-то есть дубли...
Так у тебя массив продуктов
источник

SG

Sergey Gerasimov in Laravel Framework Russian Community
Для конкретного продукта не будет дублей
источник

VU

Vlad Umrikhin in Laravel Framework Russian Community
Ну я прошу атрибуты по всем товарам раздела
Пока так  AttributeProduct::whereIn('product_id', $productsId)->selectRaw('attribute_id')->distinct()->get();
источник

SG

Sergey Gerasimov in Laravel Framework Russian Community
Vlad Umrikhin
Ну я прошу атрибуты по всем товарам раздела
Пока так  AttributeProduct::whereIn('product_id', $productsId)->selectRaw('attribute_id')->distinct()->get();
Тогда да, нужен дистинкт
источник

SG

Sergey Gerasimov in Laravel Framework Russian Community
Vlad Umrikhin
Ну я прошу атрибуты по всем товарам раздела
Пока так  AttributeProduct::whereIn('product_id', $productsId)->selectRaw('attribute_id')->distinct()->get();
только selectRaw излишен. Или просто select или в get(['attribute_id'])
источник

SG

Sergey Gerasimov in Laravel Framework Russian Community
А вообще вместо get можно использовать pluck('attribute_id')
источник

VU

Vlad Umrikhin in Laravel Framework Russian Community
Sergey Gerasimov
только selectRaw излишен. Или просто select или в get(['attribute_id'])
спасибо большое! P/s я просто сюда с B перешел...По переписке между нами в 2018 году можете понять) Много чего в новинку)
+нужно основу запросов сейчас перечитать, чет меня по group переклинило
источник

SG

Sergey Gerasimov in Laravel Framework Russian Community
Если тебе модель AttributeProduct не нужна
источник

VU

Vlad Umrikhin in Laravel Framework Russian Community
Sergey Gerasimov
Если тебе модель AttributeProduct не нужна
Нужна, я добираю из доп. таблицы потом имена групп атрибутов
источник

SG

Sergey Gerasimov in Laravel Framework Russian Community
Vlad Umrikhin
Нужна, я добираю из доп. таблицы потом имена групп атрибутов
Сделай через атрибут тогда
источник

SG

Sergey Gerasimov in Laravel Framework Russian Community
Vlad Umrikhin
Нужна, я добираю из доп. таблицы потом имена групп атрибутов
Attribute::query()->whereHas('products', func...)->get(['id', 'title']);
источник

VU

Vlad Umrikhin in Laravel Framework Russian Community
Sergey Gerasimov
Сделай через атрибут тогда
$attributeProduct->attribute->property, вы об этом? Дальше использую
        foreach ($attributesProducts as $attributeProduct){
           $idProperty = $attributeProduct->attribute->property->id;
           $filtersProducts[$idProperty]["property"] = $attributeProduct->attribute->property;
           $chooseFilterValue = $request->input('filter_' . $idProperty);
           if ($request->has('filter_' . $idProperty) && in_array($attributeProduct->attribute->id, $chooseFilterValue)) {
               $attributeProduct->attribute->checked = true;
               $changeFilters = true;
           }else{
               $attributeProduct->attribute->checked = false;
           }

           $filtersProducts[$attributeProduct->attribute->property->id]["value"][] = $attributeProduct->attribute;
       }
источник

SG

Sergey Gerasimov in Laravel Framework Russian Community
Vlad Umrikhin
$attributeProduct->attribute->property, вы об этом? Дальше использую
        foreach ($attributesProducts as $attributeProduct){
           $idProperty = $attributeProduct->attribute->property->id;
           $filtersProducts[$idProperty]["property"] = $attributeProduct->attribute->property;
           $chooseFilterValue = $request->input('filter_' . $idProperty);
           if ($request->has('filter_' . $idProperty) && in_array($attributeProduct->attribute->id, $chooseFilterValue)) {
               $attributeProduct->attribute->checked = true;
               $changeFilters = true;
           }else{
               $attributeProduct->attribute->checked = false;
           }

           $filtersProducts[$attributeProduct->attribute->property->id]["value"][] = $attributeProduct->attribute;
       }
Эм... (N+1)^2
источник

SG

Sergey Gerasimov in Laravel Framework Russian Community
Vlad Umrikhin
$attributeProduct->attribute->property, вы об этом? Дальше использую
        foreach ($attributesProducts as $attributeProduct){
           $idProperty = $attributeProduct->attribute->property->id;
           $filtersProducts[$idProperty]["property"] = $attributeProduct->attribute->property;
           $chooseFilterValue = $request->input('filter_' . $idProperty);
           if ($request->has('filter_' . $idProperty) && in_array($attributeProduct->attribute->id, $chooseFilterValue)) {
               $attributeProduct->attribute->checked = true;
               $changeFilters = true;
           }else{
               $attributeProduct->attribute->checked = false;
           }

           $filtersProducts[$attributeProduct->attribute->property->id]["value"][] = $attributeProduct->attribute;
       }
Attribute::query()
   ->with('property')
   ->whereHas('products', function($q) use ($productsId) {
         $q->whereIn('products.id', $productsId);
    )
    ->get(['id', 'property_id']);
источник

VU

Vlad Umrikhin in Laravel Framework Russian Community
Sergey Gerasimov
Эм... (N+1)^2
хм, неожиданная замена)
Сообщение ниже, я думал мне нужно доработать первый запрос, чтобы  он вместо 1 поля вернул 3

attribute_id | propery.id | proprty.title
Чтобы повторные запросы потом не использовать
источник