LogoLogo
HomeAPIBlog
3.0.0-SNAPSHOT
3.0.0-SNAPSHOT
  • INTRODUCTION
    • Getting Started
      • Running Local Development Servers
      • Beginner Tutorial: Hello World
      • Beginner Tutorial: Hello Database
      • Tutorial: Wheels, AJAX, and You
    • Frameworks and Wheels
    • Requirements
    • Manual Installation
    • Upgrading
    • Screencasts
  • Command Line Tools
    • CLI Commands
    • wheels - commands
    • wheels generate - commands
    • wheels dbmigrate - commands
    • wheels plugins - commands
  • Working with Wheels
    • Conventions
    • Configuration and Defaults
    • Directory Structure
    • Switching Environments
    • Testing Your Application
    • Contributing to Wheels
    • Documenting your Code
  • Handling Requests with Controllers
    • Request Handling
    • Rendering Content
    • Redirecting Users
    • Sending Files
    • Sending Email
    • Responding with Multiple Formats
    • Using the Flash
    • Using Filters
    • Verification
    • Event Handlers
    • Routing
    • URL Rewriting
      • Apache
      • IIS
      • Tomcat
      • Nginx
    • Obfuscating URLs
    • Caching
    • Nesting Controllers
    • CORS Requests
  • Displaying Views to Users
    • Pages
    • Partials
    • Linking Pages
    • Layouts
    • Form Helpers and Showing Errors
    • Displaying Links for Pagination
    • Date, Media, and Text Helpers
    • Creating Custom View Helpers
    • Localization
  • Database Interaction Through Models
    • Object Relational Mapping
    • Creating Records
    • Reading Records
    • Updating Records
    • Deleting Records
    • Column Statistics
    • Dynamic Finders
    • Getting Paginated Data
    • Associations
    • Nested Properties
    • Object Validation
    • Object Callbacks
    • Calculated Properties
    • Transactions
    • Dirty Records
    • Soft Delete
    • Automatic Time Stamps
    • Database Migrations
      • Migrations in Production
    • Using Multiple Data Sources
  • Plugins
    • Installing and Using Plugins
    • Developing Plugins
    • Publishing Plugins
  • Project Documentation
    • Overview
  • External Links
    • Source Code
    • Issue Tracker
    • Sponsor Us
    • Community
Powered by GitBook
LogoLogo
On this page
  • Dynamic Finders Involving More than One Column
  • Works with findAll() too
  • Passing in Other Finder Parameters
  • Avoid the Word "And" in Database Column Names

Was this helpful?

Edit on GitHub
Export as PDF
  1. Database Interaction Through Models

Dynamic Finders

Make your model calls more readable by using dynamic finders.

PreviousColumn StatisticsNextGetting Paginated Data

Last updated 21 days ago

Was this helpful?

Since the introduction of onMissingMethod() in CFML, we have been able to port over the concept of _dynamic finders_from Rails to Wheels.

The concept is simple. Instead of using arguments to tell Wheels what you want to do, you can use a dynamically-named method.

For example, the following code:

me = model("user").findOne(where="email='me@myself.com'");

Can also be written as:

me = model("user").findOneByEmail("me@myself.com");

Through the power of onMissingMethod(), Wheels will parse the method name and figure out that the value supplied is supposed to be matched against the email column.

Dynamic Finders Involving More than One Column

You can take this one step further by using code such as:

me = model("user").findOneByUserNameAndPassword("bob,pass");

In this case, Wheels will split the function name on the And part and determine that you want to find the record where the username column is "bob" and the password column is "pass".

When you are passing in two values, make special note of the fact that they should be passed in as a list to one argument and not as two separate arguments.

Works with findAll() too

In the examples above, we've used the method, but you can use the same approach on a method as well.

Passing in Other Finder Parameters

In the background, these dynamically-named methods just pass along execution to or . This means that you can also pass in any arguments that are accepted by those two methods.

The below code, for example, is perfectly valid:

users = model("user").findAllByState(value="NY", order="name", page=3);

When passing in multiple arguments like above, you have to start naming them instead of relying on the order of the arguments though. When doing so, you need to name the argument value if you're passing in just one value and values if you're passing in multiple values in a list. In other words, you need to name it values when calling an Andtype dynamic finder.

users = model("user").findAllByCityAndState(
        values="Buffalo,NY", order="name", page=3
);

Avoid the Word "And" in Database Column Names

Keep in mind that this dynamic method calling will break down completely if you ever name a column firstandlastname or something similar because Wheels will then split the method name incorrectly. So avoid using "And" in the column name if you plan on taking advantage of dynamically-named finder methods.

findOne()
findAll()
findOne()
findAll()