In meiner Task-Management-Anwendung, sollten Benutzer in der Lage sein, Aufgaben zu filtern basierend auf: assignedTo
, priority
, status
und/oder dueDate
Dynamisch eine Abfrage auf params basiert die Erstellung an eine Steuerung übergeben wird
Ich bin nicht sicher, wie man Um eine dynamische Abfrage zu erstellen, wird eine Abfrage basierend auf den verfügbaren Parametern erstellt.
Zum Beispiel:
Wenn ich eine URL haben wie: task/index?assignedTo=1&status=2
ich eine Abfrage nur auf diese beiden Parameter auf Basis aufbauen können. Die Methode, die ich bin es gewohnt, ist die
Task.findAllByAssignedToAndStatus(
User.get(params.assignedTo),
TaskStatus.get(params.status)
)
Ich möchte natürlich nicht durch das Schreiben aus jeder findAllBy
Abfrage für jede mögliche URL-Parameter-Kombination ein Trockenverfahren implementieren.
Gibt es eine gute Möglichkeit, dies in Grails zu tun?
Es ist trivial, die finder Namen zu generieren, indem etwas zu tun wie '" findAllBy $ {params.collect {k, v -> k.capitalize()} .join ('And')} ", aber woher weiß man, dass 'assignedTo' eine 'User'-Instanz und' 'laden soll Status "sollte sich auf einen' TaskStatus' beziehen? –
Einverstanden, ich würde es nicht so machen wollen. Es ist für eine Dissertation, also möchte ich, dass der Code so sauber wie möglich ist. –
Könnte ich vorschlagen, eine benannte Abfrage - http://grails.org/doc/2.2.1/ref/Domain%20Classes/namedQueries.html - dann können Sie nach Benutzer und Status ausfiltern. Ich denke, sie rocken! – marko