Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Баг множественного выбора в одном атрибуте #8

Open
Serega67 opened this issue Nov 14, 2014 · 1 comment

Comments

@Serega67
Copy link

Доброе утро!

Работаю с движком Eximus. И недавно исправлял баг Множественного выбора. Вот описание исправленного бага из трекера багов и задач Eximus'а:

После выбора множественных атрибутов, движок ищет все товары по критерию. Однако, в расширении EEavBehavior было немного другое трактование условия множественного выбора. Если пришел массив со значениями для одного атрибута, то EEavBehavior делал составной JOIN, в котором по всем значениям из массива делал склейку - т.е. это даже не точное соответствие товара всем значениям при перечислении через AND, а сложный запрос с пропорциональным количеством JOIN'ов, в каждом из которых идет проверка на соответствие.

Решение: если в EEavBehavior приходит массив со значениям для атрибута, то сделал проверку на вхождение в массив через IN.

Вот изменение в функции protected function getFindByEavAttributesCriteria($attributes){:

Было:

    foreach ($values as $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 ($values as $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++;   


Правильно ли я понял, что именно здесь нужно было исправить и что здесь планировался такой критерий? :)
@alexwisard
Copy link

Написал такой же код :)
Решил предложить, а тут уже есть!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants