2015-04-24 3 views
3

j'ai en glissant une configuration qui ressemble un peu comme ceci:Comment puis-je appliquer un filtre par défaut sur un objet Slick TableQuery?

class Users(tag: Tag) extends Table(tag) { 
    def name = column[String] 
    def disabled = column[Boolean] 
    def * = ... 
} 

object Users extends TableQuery(new Users(_)) {} 

Ce que je veux est quelqu'un à tout moment utilise l'objet Users pour interroger la base de données, il exclut les utilisateurs handicapés. Par exemple:

Users.where(_.name === "Fred")

exécute:

select * from users where name = 'Fred' and disabled = false

Est-ce possible? Je n'arrive pas à trouver quelque chose dans l'objet TableQuery à remplacer pour me laisser faire.

Appréciez toute lumière qui peut être perdue à ce sujet.

Répondre

3

Une chose que vous devriez être en mesure de le faire est de définir vos requêtes comme de simples expressions/fonctions Scala:

val disabledUsers = Users.filterNot(_.disabled) 

ci-dessus ne définit que une requête qui filtre les personnes handicapées. Vous pouvez ensuite combiner plusieurs fois à différents points du programme avec des questions plus spécifiques:

disabledUsers.where(_.name === "Fred") 

Je crois Slick devrait alors être assez intelligent pour compiler et optimiser la requête en une seule SELECT