Поиск модификаций товара по значениям доп. свойств модификаций

Модератор
#
Поиск модификаций товара по значениям доп. свойств модификаций
<?php
$shop_item_id = 29;
// Связь с модификациями товара
$oModifications = Core_Entity::factory('Shop_Item', $shop_item_id)
   ->Modifications;

// Массив условий отбора, ключ - ID свойства, значение - значение свойства
$aValues = array(
   61 => 123,
   62 => 456
);

// Объединение с таблицами значений свойств
$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)
{
   echo '<br />', $oModification;
}

?>
#
Re: Поиск модификаций товара по значениям доп. свойств модификаций
а можно проводить поиск среди как модификаций так и самого основного товара?
Модератор
#
Re: Поиск модификаций товара по значениям доп. свойств модификаций
Тогда
$oModifications = Core_Entity::factory('Shop_Item', $shop_item_id)
   ->Modifications;
заменяем на
$oModifications = Core_Entity::factory('Shop', $shop_id)
   ->Shop_Item;
будет поиск по всем товарам и модификациям магазина.
#
Re: Поиск модификаций товара по значениям доп. свойств модификаций
не совсем то что я имел ввиду - нужно по одному товару и его модификациям
Модератор
#
Re: Поиск модификаций товара по значениям доп. свойств модификаций
blue-ant,
тогда пишем доп. условие:
$oModifications = Core_Entity::factory('Shop', $shop_id)
   ->Shop_Items;
  
$oModifications->queryBuilder()
   ->open()
   // Товар
   ->where('shop_items.id', '=', $shop_item_id)
   ->setOr()
   // или модификация этого товара
   ->where('shop_items.modification_id', '=', $shop_item_id)
   ->close();
#
Re: Поиск модификаций товара по значениям доп. свойств модификаций
Спасибо большое! теперь то что нужно!
только вместо "->Shop_Item;" - "->Shop_Items;"
Модератор
#
Re: Поиск модификаций товара по значениям доп. свойств модификаций
blue-ant, поправил пример. Пожалуйста.
#
Re: Поиск модификаций товара по значениям доп. свойств модификаций
А можете пояснить, где это всё прописывать?
Модератор
#
Re: Поиск модификаций товара по значениям доп. свойств модификаций
Это отдельный пример логики реализации, где Вы его хотите прописать - неясно.
#
Re: Поиск модификаций товара по значениям доп. свойств модификаций
Total выдает правильное количество модификаций обладающих заданным доп.свойством, но в выводимых данных нет информации о id модификации, названии т .д.
Вот пример вывода:
Total = 7
Model 'shop_item', fields: id=, shortcut_id=0, shop_tax_id=0, shop_seller_id=0, shop_group_id=0, shop_currency_id=0, shop_id=0, shop_producer_id=0, shop_measure_id=0, type=0, name=, marking=, vendorcode=, description=, text=, image_large=, image_small=, weight=0, price=0, active=1, siteuser_group_id=-1, sorting=0, path=, seo_title=, seo_description=, seo_keywords=, indexing=1, image_small_height=0, image_small_width=0, image_large_height=0, image_large_width=0, yandex_market=1, yandex_market_bid=0, yandex_market_cid=0, manufacturer_warranty=0, country_of_origin=, yandex_market_sales_notes=, user_id=19, siteuser_id=0, datetime=2016-05-14 14:51:30, modification_id=0, guid=AB3A5035-D8BC-DEA3-E1D9-C5AB9C950AAF, start_datetime=0000-00-00 00:00:00, end_datetime=0000-00-00 00:00:00, showed=0, length=0, width=0, height=0, apply_purchase_discount=1, delivery=1, pickup=1, store=0, deleted=0

Как получить ид модификации и ее характеристики?
Авторизация