2011-08-08 3 views
1

Quelle est la meilleure façon d'effectuer des opérations de définition à l'aide de DBIx :: Class? J'ai vu qu'une solution serait de créer une Source de Résultat basée sur ma requête, mais mes conditions seront définies par l'utilisateur et je ne sais pas si la meilleure réponse est de créer la source de résultats à la volée.Définir les opérations dans DBIx :: Class

Fondamentalement, je besoin de traduire ce type de requête à DBIC où code, attr_name et value est défini par l'utilisateur:

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

Lorsque vous dites défini par l'utilisateur, voulez-vous dire qu'il peut y avoir plus ou moins que les 9 placeholders ci-dessus? – cubabit

+0

Oui, exactement. L'utilisateur peut définir de nombreux filtres en utilisant des paires de (nom_attribut, valeur) et des intersections et des unions. – nsbm

Répondre

2

Peut-DBIx::Class::Helper::ResultSet::SetOperations être ce que vous avez besoin?

+0

En fait, je ne peux pas utiliser cette aide DBIC parce que Im sur un projet avec plusieurs groupes et nous utilisons tous le même schéma de base de données et la même couche DBIC. Et pour utiliser ce module, je devrai changer ma classe de base Resultset et je dois garder la compatibilité avec les autres groupes. – nsbm

Questions connexes