Trong ứng dụng quản lý công việc của tôi, người dùng sẽ có thể lọc nhiệm vụ dựa trên: assignedTo
, priority
, status
và/hoặc dueDate
động tạo ra một truy vấn dựa vào thông số được truyền cho một bộ điều khiển
Tôi không chắc chắn về cách để tạo truy vấn động ở chỗ nó sẽ tạo truy vấn dựa trên các tham số có sẵn.
Ví dụ:
Nếu tôi có một URL như: task/index?assignedTo=1&status=2
tôi có thể xây dựng một truy vấn dựa trên chỉ có hai thông số này. Phương pháp tôi đang sử dụng để là
Task.findAllByAssignedToAndStatus(
User.get(params.assignedTo),
TaskStatus.get(params.status)
)
Tôi rõ ràng là không muốn thực hiện một phương pháp khô bằng cách viết ra mỗi truy vấn findAllBy
cho mỗi sự kết hợp tham số URL có thể.
Có cách nào tốt để làm điều này trong grails?
Đó là tầm thường để tạo ra tên cụ tìm bằng cách làm một cái gì đó như ''findAllBy $ {params.collect {k, v -> k.capitalize()} .join (' And ')}" ', nhưng làm thế nào để biết rằng' assignTo' sẽ nạp một cá thể 'User' và' trạng thái' nên tham chiếu đến một 'TaskStatus'? –
Đồng ý, tôi không muốn làm như vậy. Nó cho một luận án vì vậy tôi muốn mã được càng sạch càng tốt. –
Tôi có thể đề xuất truy vấn được đặt tên - http://grails.org/doc/2.2.1/ref/Domain%20Classes/namedQueries.html - sau đó bạn có thể lọc theo người dùng và trạng thái. Tôi nghĩ rằng họ đá! – marko