You are viewing documentation for v1.0.x. Change

findOne()

Description

Fetches the first record found based on the WHERE and ORDER BY clauses. With the default settings (i.e. the returnAs argument set to object) a model object will be returned if the record is found and the boolean value false if not. Instead of using the where argument you can create cleaner code by making use of a concept called dynamic finders.

Function Syntax

findOne([ where, order, select, include, cache, reload, parameterize, returnAs ])

Parameters

Parameter Type Required Default Description
where string No This argument maps to the WHERE clause of the query. The following operators are supported: =, <>, <, <=, >, >=, LIKE, AND, and OR (note that the key words have to be written in upper case). You can also use parentheses to group statements. You do not have to specify the table name(s), Wheels will do that for you.
order string No This argument maps to the ORDER BY clause of the query. You do not have to specify the table name(s), Wheels will do that for you.
select string No This argument determines how the SELECT clause for the query used to return data will look. You can pass in a list of the properties (which maps to columns) that you want returned from your table(s). If you don't set this argument at all, Wheels will select all properties from your table(s). If you specify a table name (e.g. users.email) or alias a column (e.g. fn AS firstName) in the list then the entire list will be passed through unchanged and used in the SELECT clause of the query. If not, Wheels will prepend the table name and resolve any naming collisions (which could happen when using the include argument) automatically for you. The naming collisions are resolved by prepending the model name to the property name so users.firstName could become userFirstName for example.
include string No Associations that should be included in the query using INNER or LEFT OUTER joins (which join type that is used depends on how the association has been set up in your model). If all included associations are set on the current model you can specify them in a list, e.g. department,addresses,emails. You can build more complex include strings by using parentheses when the association is set on an included model, like album(artist(genre)) for example.
cache any No Accepts a boolean or numeric value. If you want to cache the query you can do so by specifying the number of minutes you want to cache the query for here. If you set it to true the default cache time will be used (60 minutes).
reload boolean No false Set to true to force Wheels to query the database even though an identical query has been run in the same request (the default in Wheels is to get the second query from the cache).
parameterize any No true Accepts a boolean value or a string. Set to true to use cfqueryparam on all columns or pass in a list of property names to use cfqueryparam on those only.
returnAs string No object Can be set to either object or query. See documentation for findAll() for more info.

Examples

<!--- Getting the most recent order as an object from the database --->
<cfset anOrder = model("order").findOne(order="datePurchased DESC")>

<!--- Using a dynamic finder to get the first person with the last name `Smith`. Same as calling model("user").findOne(where"lastName='Smith'") --->
<cfset person = model("user").findOneByLastName("Smith")>

<!--- Getting a specific user using a dynamic finder. Same as calling model("user").findOne(where"email='someone@somewhere.com' AND password='mypass'") --->
<cfset user = model("user").findOneByEmailAndPassword("someone@somewhere.com,mypass")>

<!--- If you have a `hasOne` association setup from `user` to `profile` you can do a scoped call (the `profile` method below will call `model("profile").findOne(where="userId=#user.id#")` internally) --->
<cfset aUser = model("user").findByKey(params.userId)>
<cfset aProfile = aUser.profile()>

<!--- If you have a `hasMany` association setup from `post` to `comment` you can do a scoped call (the `findOneComment` method below will call `model("comment").findOne(where="postId=#post.id#")` internally) --->
<cfset aPost = model("post").findByKey(params.postId)>
<cfset aComment = aPost.findOneComment(where="text='I Love Wheels!'")>