I am creating a web component that allows users to filter the results of some data based on some optional filtering fields. In SOQL, how do you handle returning results when a filter is not set?
For example, I have a Student__c
object. I want users to be able to filter by the the Student__c's Field A
(String), Field B
(Integer) and Field C
(String).
I have this function:
function getStudents(nationality, school, birthYear) {
return [SELECT * FROM Student__c WHERE ....];
}
I call this function to load some data to display in a graph to a user. The user doesn't have to filter the students by nationality
, school
, and birthYear
, so by default, these values will be null, and should return the results of all students. But if the user opts to filter by birthYear
, then it should filter by birthYear. If they want to filter by birthYear and school, then it should do so.
I'm trying to avoid having to do something like:
function getStudents(nationality, school, birthYear) {
if (nationality == null && school == null, && birthYear == null) {
return [SELECT * FROM Student__c];
} else if (nationality != null && school == null, && birthYear == null)
return [SELECT * FROM Student__c WHERE nationality__c == :nationality];
}
else if ( .... ) {
...
}
Instead of having different queries for the different scenarios (3 field filters is 8 different queries, 4 fields is 15 different, etc.) I would like my query to handle it all. I was thinking about using a contains, but SOQL doesn't have that from what I believe...