Я пытаюсь следующий код, чтобы получить идентификаторы всех простых продуктов, которые являются потомками $collection
, которые я знаю, как набор настраиваемых продуктов.
foreach($collection as $_product) {
$_children = $_product->getTypeInstance()->getUsedProductIds($_product);
print_r($_children);
}
Однако все массивы, которые я получаю, пусты. Я делаю что-то неправильно?
magento2
magento-2.0
simple-product
b_pcakes
источник
источник
$_children = $_product->getTypeInstance()->getUsedProducts($_product);
если вы что-то получаете.getUsedProductCollection
Ответы:
Вы можете распечатать идентификаторы своих дочерних продуктов (из настраиваемых продуктов), внеся небольшое изменение в свой код следующим образом
После этого посмотрите на ваши файлы журналов, и вы получите IDS вашего ребенка.
источник
Ответы на этот вопрос неверны. Хотя их реализации могут работать, это неправильный способ справиться с этим. Правильный способ сделать это - использовать сервисные контракты Magentos и модели данных.
В этом случае
Magento\ConfigurableProduct\Api\LinkManagementInterface
вам нужен сервисный договор.Небольшой пример кода, который я использую в консольной команде:
Magento 2 не очень соответствует его собственному коду, так как большая часть кода перенесена из Magento 1. Именно поэтому вы все еще видите остатки моделей, основанных на наследовании, и их методов (например
getTypeInstance()
). Если вы хотите создать код Magento 2, ориентированный на будущее, максимально используйте контракты на обслуживание и модели данных.источник
Вы можете просто вызвать метод ниже,
Выше
$getChildId
отображаются все простые идентификатор продукта.источник
Другой способ добиться этого - использовать метод getChildrenIds.
$ children = $ cProductTypeInstance-> getChildrenIds ($ this-> currentProductObj-> getId ());
источник
Чтобы получить реальные дочерние объекты продукта (а не только строки их идентификаторов), используйте это:
Чтобы получить их идентификаторы или другие свойства, используйте приведенное выше с циклом:
источник