Akeneo API - Получение детских моделей товаров

Я использую Akeneo 2.3, и у меня есть структура продукта, как

Product Model (Master) -> Product Model (Color) -> Product (Size)

Я пытаюсь вызвать в эту конечную точку

{{url}}/api/rest/v1/product-models?search = {
    "parent": [{
        "operator": " = ",
        "value": "DRZ9186"
    }]
}

Однако я получаю

{
    "code": 422,
    "message": "Filter on property \"parent\" is not supported or does not support operator \"=\""
}

Теперь я не совсем уверен, действительно ли родительский элемент не поддерживается фильтром, поскольку они здесь не упоминаются https://api.akeneo.com/documentation/filter.html

Совершенно уверен, что дело доходит до \Pim\Bundle\ApiBundle\Checker\QueryParametersChecker::checkPropertyParameters, но дальше я двигаться не мог.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
0
820
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Свойство «parent» сейчас недоступно в Akeneo Web API.

Вы правы насчет QueryParametersChecker::checkPropertyParameters. Он проверяет, какие свойства можно использовать, на основе своего определение услуги. Как видите, parent не входит в число разрешенных полей.

Кстати, даже если бы он был доступен, на данный момент нет оператора = для свойства parent. Доступные операторы: IN, EMPTY и NOT EMPTY. Так что вместо:

search = {"parent":[{"operator":" = ","value":"DRZ9186"}]

правильный запрос будет:

search = {"parent":[{"operator":"IN","value":"[DRZ9186]"}]

Не стесняйтесь открывать запрос функции на Репозиторий Akeneo GitHub с описанием вашего варианта использования. Владельцам продукции Akeneo, безусловно, будет интересно.

Спасибо. Хотите знать, есть ли у вас указатель, счастлив ли я взять это на себя? Сразу после чего-то вроде того, какой класс / метод я должен искать в расширении / переопределении.

Alvin Nguyen 12.07.2018 00:37

Нет необходимости переопределять класс. Если вы хотите добавить его как собственный код в свой проект, вам необходимо сначала переопределить 3 службы в вашем приложении проекта: pim_api.checker.query_parameters, pim_api.checker.query_parameters_product и pim_api.checker.query_parameters_product_model. Добавьте parent в массив их последнего аргумента. Это должно помочь.

Damien Carcel 12.07.2018 09:46

Спасибо, @Damien, я попробую :) ценю вашу помощь.

Alvin Nguyen 12.07.2018 13:34

Привет, @Damien, похоже, это неплохо работает с конечной точкой моделей продуктов, но, похоже, не выполняет фильтрацию (возвращает список пустых элементов) для конечной точки продуктов. Какие-либо предложения?

Alvin Nguyen 22.07.2018 12:54

Привет, @AlvinNguyen. В Akeneo есть 3 разных индекса elasticsearch: «akeneo_pim_product», «akeneo_pim_product_model» и «akeneo_pim_product_and_product_model» (последний используется в сетке данных). Содержание этих индексов поступает от нормализаторов. Если вы посмотрите на нормализатор свойств продукта github.com/akeneo/pim-community-dev/blob/master/src/Pim/…, вы увидите, что он не обрабатывает «родительское» поле (которое в таблице продуктов называется «product_model», а не «parent»).

Damien Carcel 23.07.2018 17:10

Если вы хотите, чтобы родительский фильтр работал, вам нужно переопределить этот нормализатор (его служба - «pim_catalog.normalizer.indexing_product.product.properties» ‌) и добавить «родительское» поле в elasticsearch, заполнив его кодом модели продукта, которая является родительской для вашего продукта, или со значением null, если у продукта нет родительского элемента.

Damien Carcel 23.07.2018 17:11

Другие вопросы по теме