Установить операции в DBIx::Class

Как лучше всего выполнять операции над множествами с помощью DBIx::Class? Я видел, что одним из решений будет создание источника результатов на основе моего запроса, но мои условия будут определяться пользователем, и я не знаю, будет ли лучшим ответом создание источника результатов на лету.

В основном мне нужно перевести этот тип запроса в DBIC, где code, attr_name и value определяются пользователем:

SELECT pid FROM product WHERE code = 48
INTERSECT
(
  ( SELECT pid FROM attr WHERE attr_name = 'color' AND value = 'blue'
    INTERSECT
    SELECT pid FROM attr WHERE attr_name = 'size' AND value = 'big'
  )
  UNION
  ( SELECT pid FROM attr WHERE attr_name = 'color' AND value = 'green'
    INTERSECT
    SELECT pid FROM attr WHERE attr_name = 'size' AND value = 'small'
  )
)

person nsbm    schedule 08.08.2011    source источник
comment
Когда вы говорите, что определено пользователем, вы имеете в виду, что может быть больше или меньше 9 заполнителей выше?   -  person cubabit    schedule 10.08.2011
comment
Да, точно. Пользователь может определить множество фильтров, используя пары (attr_name, value) и пересечения и объединения.   -  person nsbm    schedule 10.08.2011


Ответы (1)


Может DBIx::Class::Helper::ResultSet ::SetOperations будет тем, что вам нужно?

person cubabit    schedule 11.08.2011
comment
На самом деле я не могу использовать этот помощник DBIC, потому что я работаю над проектом с несколькими группами, и все мы используем одну и ту же схему базы данных и один и тот же слой DBIC. И чтобы использовать этот модуль, мне придется изменить базовый класс набора результатов и сохранить совместимость с другими группами. - person nsbm; 11.08.2011