Как получить продукты из идентификатора потока продуктов в Shopware 6?

#php #symfony4 #shopware6

#php #symfony4 #shopware6

Вопрос:

Я пытаюсь создать пользовательскую команду, в которой я хочу использовать функцию динамической группы продуктов Shopware 6 для извлечения продуктов, которые соответствуют фильтрам в определенной группе продуктов (также известной как потоки продуктов).

Я делаю это для первоначальной выборки потоков, но я не понимаю, как применить фильтры для выборки продуктов.

             $streamCriteria = new Criteria($productStreamIds);
            $streamCriteria->addAssociation('productCrossSellings');
            $streamCriteria->addAssociation('productExports');
            $streamCriteria->addAssociation('filters');

            $streams = $this->streamRepository->search($streamCriteria, $context)->getEntities();
            /** @var ProductStreamEntity $stream */
            foreach ($streams as $stream) {
                foreach ($stream->getFilters() as $filter) {
                    $productCriteria->addAggregation($filter); // DOES NOT WORK
                    $productCriteria->addFilter($filter); // DOES NOT WORK EITHER
                }
            }
  

Я попытался получить, filters который дает мне массив фильтров, которые применяются в потоке продуктов, но он не применим напрямую к criteria->addFilter() из-за разных ожидаемых типов.

Это массив фильтров, который я получаю:

 ShopwareCoreContentProductStreamAggregateProductStreamFilterProductStreamFilterCollection^ {#10304
  #elements: array:5 [
    "2c6a8a44d9c544f2812024f6414d56f9" => ShopwareCoreContentProductStreamAggregateProductStreamFilterProductStreamFilterEntity^ {#11014
      #type: "multi"
      #field: null
      #operator: "OR"
      #value: null
      #productStreamId: "160274948d684a73afad0bde6aee19e8"
      #parentId: null
      #productStream: null
      #queries: null
      #parent: null
      #position: 0
      #parameters: null
      #customFields: null
      #_uniqueIdentifier: "2c6a8a44d9c544f2812024f6414d56f9"
      #versionId: null
      #translated: []
      #createdAt: DateTimeImmutable @1600069477 {#3113
        date: 2020-09-14 07:44:37.521 UTC ( 00:00)
      }
      #updatedAt: null
      #_entityName: "product_stream_filter"
      #extensions: array:1 [
        "foreignKeys" => ShopwareCoreFrameworkStructArrayStruct^ {#11007
          #data: []
          #apiAlias: null
          #extensions: []
        }
      ]
      #id: "2c6a8a44d9c544f2812024f6414d56f9"
    }
    "6dff7581e91a477ea2eca564a099eb90" => ShopwareCoreContentProductStreamAggregateProductStreamFilterProductStreamFilterEntity^ {#10832
      #type: "range"
      #field: "width"
      #operator: null
      #value: null
      #productStreamId: "160274948d684a73afad0bde6aee19e8"
      #parentId: "2c6a8a44d9c544f2812024f6414d56f9"
      #productStream: null
      #queries: null
      #parent: null
      #position: 1
      #parameters: array:1 [
        "lte" => 749
      ]
      #customFields: null
      #_uniqueIdentifier: "6dff7581e91a477ea2eca564a099eb90"
      #versionId: null
      #translated: []
      #createdAt: DateTimeImmutable @1600069477 {#2958
        date: 2020-09-14 07:44:37.523 UTC ( 00:00)
      }
      #updatedAt: null
      #_entityName: "product_stream_filter"
      #extensions: array:1 [
        "foreignKeys" => ShopwareCoreFrameworkStructArrayStruct^ {#10871
          #data: []
          #apiAlias: null
          #extensions: []
        }
      ]
      #id: "6dff7581e91a477ea2eca564a099eb90"
    }
    "754b78c4ec74492bb96dc724f3e7ba6a" => ShopwareCoreContentProductStreamAggregateProductStreamFilterProductStreamFilterEntity^ {#10766
      #type: "range"
      #field: "weight"
      #operator: null
      #value: null
      #productStreamId: "160274948d684a73afad0bde6aee19e8"
      #parentId: "2c6a8a44d9c544f2812024f6414d56f9"
      #productStream: null
      #queries: null
      #parent: null
      #position: 2
      #parameters: array:1 [
        "gte" => 293
      ]
      #customFields: null
      #_uniqueIdentifier: "754b78c4ec74492bb96dc724f3e7ba6a"
      #versionId: null
      #translated: []
      #createdAt: DateTimeImmutable @1600069477 {#10274
        date: 2020-09-14 07:44:37.525 UTC ( 00:00)
      }
      #updatedAt: null
      #_entityName: "product_stream_filter"
      #extensions: array:1 [
        "foreignKeys" => ShopwareCoreFrameworkStructArrayStruct^ {#10774
          #data: []
          #apiAlias: null
          #extensions: []
        }
      ]
      #id: "754b78c4ec74492bb96dc724f3e7ba6a"
    }
    "86d2c2bd8df14f8684c8f4c801e5a19a" => ShopwareCoreContentProductStreamAggregateProductStreamFilterProductStreamFilterEntity^ {#10272
      #type: "range"
      #field: "height"
      #operator: null
      #value: null
      #productStreamId: "160274948d684a73afad0bde6aee19e8"
      #parentId: "2c6a8a44d9c544f2812024f6414d56f9"
      #productStream: null
      #queries: null
      #parent: null
      #position: 3
      #parameters: array:1 [
        "gte" => 746
      ]
      #customFields: null
      #_uniqueIdentifier: "86d2c2bd8df14f8684c8f4c801e5a19a"
      #versionId: null
      #translated: []
      #createdAt: DateTimeImmutable @1600069477 {#10313
        date: 2020-09-14 07:44:37.526 UTC ( 00:00)
      }
      #updatedAt: null
      #_entityName: "product_stream_filter"
      #extensions: array:1 [
        "foreignKeys" => ShopwareCoreFrameworkStructArrayStruct^ {#11009
          #data: []
          #apiAlias: null
          #extensions: []
        }
      ]
      #id: "86d2c2bd8df14f8684c8f4c801e5a19a"
    }
    "9b763069551244179dbc1f285290b673" => ShopwareCoreContentProductStreamAggregateProductStreamFilterProductStreamFilterEntity^ {#10283
      #type: "equalsAny"
      #field: "id"
      #operator: null
      #value: "c01c974a89eb4f17ab78c48251864eb7|5c0e5bc5f03d42a6980c11bf8ab67428"
      #productStreamId: "160274948d684a73afad0bde6aee19e8"
      #parentId: "2c6a8a44d9c544f2812024f6414d56f9"
      #productStream: null
      #queries: null
      #parent: null
      #position: 0
      #parameters: null
      #customFields: null
      #_uniqueIdentifier: "9b763069551244179dbc1f285290b673"
      #versionId: null
      #translated: []
      #createdAt: DateTimeImmutable @1600069477 {#12983
        date: 2020-09-14 07:44:37.522 UTC ( 00:00)
      }
      #updatedAt: null
      #_entityName: "product_stream_filter"
      #extensions: array:1 [
        "foreignKeys" => ShopwareCoreFrameworkStructArrayStruct^ {#10356
          #data: []
          #apiAlias: null
          #extensions: []
        }
      ]
      #id: "9b763069551244179dbc1f285290b673"
    }
  ]
  #extensions: []
}

  

Все productCrossSellings и productExports ассоциации также возвращаются null (хотя я не знаю, для чего используются эти переменные, но я подумал, что, возможно, это используется как-то внутренне для получения связанных продуктов для этой группы).

Итак, мой вопрос в том, как мы получаем продукты, соответствующие фильтрам в группе продуктов?

Ответ №1:

Вы можете проверить ShopwareCoreContentProductStreamServiceProductStreamBuilder , и как это используется в ShopwareCoreContentProductSalesChannelCrossSellingSalesChannelCrossSellingController::loadProductsForCrossSelling

Я надеюсь, что это было бы полезно.

Комментарии:

1. Shopware обновился с момента этого ответа, и, например, вы могли бы проверить это: ShopwareCoreContentProductSalesChannelCrossSellingProductCrossSellingRoute::loadByStream