W mojej aplikacji do zarządzania zadaniami, użytkownicy powinni mieć możliwość filtrowania zadań na podstawie: assignedTo
, priority
, status
i/lub dueDate
Dynamicznie tworzenie kwerendy na podstawie params są przekazywane do kontrolera
nie jestem pewien, w jaki sposób utworzyć zapytanie dynamiczne, ponieważ zbuduje zapytanie na podstawie dostępnych parametrów.
Na przykład:
Jeśli mam URL takie jak: task/index?assignedTo=1&status=2
mogę zbudować kwerendę opartą tylko na tych dwóch parametrów. Metoda jestem przyzwyczajony jest
Task.findAllByAssignedToAndStatus(
User.get(params.assignedTo),
TaskStatus.get(params.status)
)
I oczywiście nie chcą wdrożyć sucho przez wypisywanie każdy findAllBy
zapytanie dla każdej możliwej kombinacji parametrów URL.
Czy można to zrobić w graalach?
To trywialne, aby wygenerować nazwy znajdź robiąc coś jak '" findAllBy $ {params.collect {k, v -> k.capitalize()} .join ("And ')}", ale skąd wiadomo, że 'assignTo' powinno załadować instancję' User' i ' status "powinien odnosić się do' TaskStatus'? –
Zgoda, nie chciałbym robić tego w ten sposób. Jest na rozprawę, więc chcę, aby kod był jak najbardziej czysty. –
Może zasugeruję nazwane zapytanie - http://grails.org/doc/2.2.1/ref/Domain%20Classes/namedQueries.html - wtedy możesz odfiltrować według użytkownika i statusu. Myślę, że oni rocka! – marko