Database 在DBIx::Class中设置操作
使用DBIx::Class执行set操作的最佳方法是什么? 我看到一个解决方案是基于我的查询创建一个结果源,但我的条件将由用户定义,我不知道最好的答案是动态创建结果源 基本上,我需要将此类查询转换为DBIC,其中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 =
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基类,并且我需要保持和其他组的兼容性。