Database 在DBIx::Class中设置操作

Database 在DBIx::Class中设置操作,database,perl,dbix-class,set-operations,Database,Perl,Dbix Class,Set Operations,使用DBIx::Class执行set操作的最佳方法是什么? 我看到一个解决方案是基于我的查询创建一个结果源,但我的条件将由用户定义,我不知道最好的答案是动态创建结果源 基本上,我需要将此类查询转换为DBIC,其中code,attr\u name和value由用户定义: SELECT pid FROM product WHERE code = 48 INTERSECT ( ( SELECT pid FROM attr WHERE attr_name = 'color' AND value =

使用DBIx::Class执行set操作的最佳方法是什么? 我看到一个解决方案是基于我的查询创建一个结果源,但我的条件将由用户定义,我不知道最好的答案是动态创建结果源

基本上,我需要将此类查询转换为DBIC,其中
code
attr\u 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'
  )
)

可能是您需要的吗?

当您说“由用户定义”时,您的意思是可能多于或少于上面的9个占位符吗?是的,完全正确。用户可以使用成对的(attr_name,value)和交集及并集定义许多过滤器。实际上,我不能使用这个DBIC帮助器,因为我在一个有多个组的项目中,我们都使用相同的数据库模式和相同的DBIC层。要使用这个模块,我必须更改我的Resultset基类,并且我需要保持和其他组的兼容性。