Как найти все продукты пакета, которые содержат простые
-
16-10-2019 - |
Вопрос
Мне нужно найти способ программно найти все продукты пакета, которые содержат конкретный простой продукт. Я надеюсь, что есть простое решение этой проблемы, так как я не смог разобраться в одном из них.
Решение
Следующее должно заставить вас начать. Это не самый исполнительный способ сделать это - мы загружаем коллекцию комплексных продуктов, получаем идентификаторы детей, а затем проверяем эти идентификаторы на то, что мы хотим. Тем не менее, это должно быть подходящим для потребностей сценариев оболочки, некоторых потребностей магазина фронта и должно дать вам указатели на получение этой информации более эффективным способом, изучив, как основные методы извлекают данные (то есть, какие модели ресурсов, ведущие к каким таблицам) Анкет
Протестировано в Magento CE 1.7.0.1
function findBundledProductsWithThisChildProduct($id_to_find)
{
//grab all bundled products
$bundles = array();
$products = Mage::getModel('catalog/product')
->getCollection()
->addFieldToFilter('type_id','bundle');
//loop over bundled products
foreach($products as $product)
{
//get child product IDs
$children_ids_by_option = $product
->getTypeInstance($product)
->getChildrenIds($product->getId(),false); //second boolean "true" will return only
//required child products instead of all
//flatten arrays (which are grouped by option)
$ids = array();
foreach($children_ids_by_option as $array)
{
$ids = array_merge($ids, $array);
}
//perform test and add to return value
if(in_array($id_to_find, $ids))
{
$bundles[] = $product;
}
}
return $bundles;
}
//usage
$products = findBundledProductsWithThisChildProduct($simple_product_id);
foreach($products as $product)
{
var_dump($product->getData());
}
Другие советы
Я знаю, что это тоже после того, как он будет полезен для вас, но для будущих искателей ...
Основной ответ Janw-правильный, но более магенто-э-э-э-э-э-э-э-э-э-э-э-э-э-э-эмокаж был бы:
$parentIds = Mage::getResourceSingleton('bundle/selection')->getParentIdsByChild($product->getId());
Затем вы можете загрузить фильтрацию сбора продуктов на эти идентификаторы.
Я видел ответ Алана Шторма. Но что, если у меня уже есть 100 продуктов. Тогда вам нужно будет пройти через все это :(
Я выяснил способ запросить это:
<?php
function get_bundle_product_by_simple_id($id) {
$read= Mage::getSingleton('core/resource')->getConnection('core_read');
// fetch read database connection that is used in Mage_Core module
$read = Mage::getSingleton('core/resource')->getConnection('core_read');
$query = sprintf("SELECT `parent_product_id` FROM `catalog_product_bundle_selection` WHERE `product_id` = '%s'",
htmlspecialchars( stripslashes( $id ) )
);
$value=$read->query( $query );
$row = $value->fetch();
if( is_null($row) ) {
return $row;
}
return $row['parent_product_id'];
}
Я довольно новичок в Magento, так что могут быть лучшие пути. Или причины не делать этого вообще. В основном убежание/снятие $id