Dans votre méthode, utilisez simplement les paramètres de votre SQL dynamique qui effectue la recherche. De cette façon, la clause where est construite juste avant l'exécution du SQL. Vous passerez simplement les paramètres de recherche dans votre méthode en tant qu'arguments.
Quelque chose comme ça ...
<cffunction name="getByAttributesQuery" access="public" output="false" returntype="query">
<cfargument name="id" type="numeric" required="false" />
<cfargument name="userName" type="string" required="false" />
<cfargument name="firstName" type="string" required="false" />
<cfargument name="lastName" type="string" required="false" />
<cfargument name="createdAt" type="date" required="false" />
<cfargument name="updatedAt" type="date" required="false" />
<cfargument name="orderby" type="string" required="false" />
<cfset var qList = "" />
<cfquery name="qList" datasource="#variables.dsn#">
SELECT
id,
userName,
firstName,
lastName,
createdAt,
updatedAt
FROM users
WHERE 0=0
<cfif structKeyExists(arguments,"id") and len(arguments.id)>
AND id = <cfqueryparam value="#arguments.id#" CFSQLType="cf_sql_integer" />
</cfif>
<cfif structKeyExists(arguments,"userName") and len(arguments.userName)>
AND userName = <cfqueryparam value="#arguments.userName#" CFSQLType="cf_sql_varchar" />
</cfif>
<cfif structKeyExists(arguments,"firstName") and len(arguments.firstName)>
AND firstName = <cfqueryparam value="#arguments.firstName#" CFSQLType="cf_sql_varchar" />
</cfif>
<cfif structKeyExists(arguments,"lastName") and len(arguments.lastName)>
AND lastName = <cfqueryparam value="#arguments.lastName#" CFSQLType="cf_sql_varchar" />
</cfif>
<cfif structKeyExists(arguments,"createdAt") and len(arguments.createdAt)>
AND createdAt = <cfqueryparam value="#arguments.createdAt#" CFSQLType="cf_sql_timestamp" />
</cfif>
<cfif structKeyExists(arguments,"updatedAt") and len(arguments.updatedAt)>
AND updatedAt = <cfqueryparam value="#arguments.updatedAt#" CFSQLType="cf_sql_timestamp" />
</cfif>
<cfif structKeyExists(arguments, "orderby") and len(arguments.orderBy)>
ORDER BY #arguments.orderby#
</cfif>
</cfquery>
<cfreturn qList />
</cffunction>
Supprimez les contrôles len (...) - ils ne devraient pas être présents. –
Je dois définir les paramètres de la recherche avant de faire la recherche proprement dite, donc je ne peux pas simplement passer tous les paramètres à la méthode doSearch. Je pense aussi qu'en fournissant des méthodes setter en dehors de la méthode doSearch me donne un ordre plus flexible objectSearch – Yisroel
>> Je dois définir les paramètres de la recherche avant de faire la recherche réelle, donc je ne peux pas simplement passer tous les paramètres dans le doSearch méthode << Huh? Pas même avec quelque chose comme doSearch (ArgumentCollection = Variables.SearchData)? –