You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Работаю с движком Eximus. И недавно исправлял баг Множественного выбора. Вот описание исправленного бага из трекера багов и задач Eximus'а:
После выбора множественных атрибутов, движок ищет все товары по критерию. Однако, в расширении EEavBehavior было немного другое трактование условия множественного выбора. Если пришел массив со значениями для одного атрибута, то EEavBehavior делал составной JOIN, в котором по всем значениям из массива делал склейку - т.е. это даже не точное соответствие товара всем значениям при перечислении через AND, а сложный запрос с пропорциональным количеством JOIN'ов, в каждом из которых идет проверка на соответствие.
Решение: если в EEavBehavior приходит массив со значениям для атрибута, то сделал проверку на вхождение в массив через IN.
Вот изменение в функции protected function getFindByEavAttributesCriteria($attributes){:
Было:
foreach ($valuesas$value) {
$value = $conn->quoteValue($value);
$criteria->join .= "\nJOIN {$this->tableName} eavb$i"
. "\nON t.{$pk} = eavb$i.{$this->entityField}"
. "\nAND eavb$i.{$this->attributeField} = $attribute"
. "\nAND eavb$i.{$this->valueField} = $value";
$i++;
}
Стало:
$valueTmpArr = array();
foreach ($valuesas$value) {
$valueTmpArr[] = $conn->quoteValue($value);
}
$valueInCondition = implode(',',$valueTmpArr);
$criteria->join .= "\nJOIN {$this->tableName} eavb$i"
. "\nON t.{$pk} = eavb$i.{$this->entityField}"
. "\nAND eavb$i.{$this->attributeField} = $attribute"
. "\nAND eavb$i.{$this->valueField} IN ($valueInCondition)";
$i++;
Правильно ли я понял, что именно здесь нужно было исправить и что здесь планировался такой критерий? :)
The text was updated successfully, but these errors were encountered:
Доброе утро!
Работаю с движком Eximus. И недавно исправлял баг Множественного выбора. Вот описание исправленного бага из трекера багов и задач Eximus'а:
После выбора множественных атрибутов, движок ищет все товары по критерию. Однако, в расширении EEavBehavior было немного другое трактование условия множественного выбора. Если пришел массив со значениями для одного атрибута, то EEavBehavior делал составной JOIN, в котором по всем значениям из массива делал склейку - т.е. это даже не точное соответствие товара всем значениям при перечислении через AND, а сложный запрос с пропорциональным количеством JOIN'ов, в каждом из которых идет проверка на соответствие.
Решение: если в EEavBehavior приходит массив со значениям для атрибута, то сделал проверку на вхождение в массив через IN.
Вот изменение в функции protected function getFindByEavAttributesCriteria($attributes){:
Было:
The text was updated successfully, but these errors were encountered: