<?php
$shop_item_id = 250;
// Связь с модификациями товара
$oModifications = Core_Entity::factory('Shop_Item', $shop_item_id)
->Modifications;
// Массив условий отбора, ключ - ID свойства, значение - значение свойства
$aValues = array(83 => 844);
// Объединение с таблицами значений свойств
$oModifications
->queryBuilder()
->select('shop_items.*')
->leftJoin('shop_item_properties', 'shop_items.shop_id', '=', 'shop_item_properties.shop_id')
// Если св-ва других типов, добавить соответствующие объединения
->leftJoin('property_value_ints', 'shop_items.id', '=', 'property_value_ints.entity_id',
array(
array('AND' => array('shop_item_properties.property_id', '=', Core_QueryBuilder::expression('`property_value_ints`.`property_id`')))
)
);
// Устанавливаем ограничения по свойствам
foreach ($aValues as $iPropertyId => $iProeprtyValue)
{
$oModifications
->queryBuilder()
->open()
// Идентификатор дополнительного свойства
->where('shop_item_properties.property_id', '=', $iPropertyId)
// Значание дополнительного свойства
->where('property_value_ints.value', '=', $iProeprtyValue)
->close()
->setOr();
}
$oModifications
->queryBuilder()
->groupBy('shop_items.id')
// Количество свойств
->having('COUNT(shop_item_properties.shop_id)', '=', count($aValues));
$aModifications = $oModifications->findAll();
echo '<br />Total = ', count($aModifications);
foreach ($aModifications as $oModification)
{
// print_r($oModification);
echo '<br />', $oModifications;
}
?>
Код как в примере. Вписал свое доп.свойство. Тотал выводит 7 модификаций у которых это свойство установлено, а дальше такой массив.