2011-08-08 38 views
1

使用DBIx :: Class执行set操作的最佳方式是什么? 我看到一种解决方案是基于我的查询创建结果源,但是我的条件将由用户定义,我不知道最佳答案是否即时创建结果源。在DBIx :: Class中设置操作

基本上我需要把这种类型的查询到DBIC的地方codeattr_namevalue由用户定义的:

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' 
) 
) 
+0

当你说用户定义你的意思是可能有多于或少于上面的9个占位符? – cubabit

+0

是的,确切地说。用户可以使用(attr_name,value)和交点和联合对来定义多个过滤器。 – nsbm

回答

2
+0

其实我不能使用这个DBIC Helper,因为我在一个有多个组的项目上,我们都使用相同的数据库模式和相同的DBIC层。而要使用这个模块,我将不得不更改我的Resultset Base Class,并且需要保持与其他组的兼容性。 – nsbm