2011-08-08 61 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