Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

CakePHP Plugin - Create custom find types by just defining functions

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 tests
Octocat-spinner-32 vendors
Octocat-spinner-32 README
README
/*
 * CakePHP plugin for create custom find types
 * Copyright (c) 2009 Matt Curry
 * www.PseudoCoder.com
 * http://github.com/mcurry/find
 * http://www.pseudocoder.com/archives/2008/10/24/cakephp-custom-find-queriescakephp-custom-find-types/
 *
 * Thanks to Daniel Salazar for the inspiration on pagination support
 * http://code621.com/content/10/easy-pagination-using-matt-curry-s-custom-find-types
 *
 * @author      Matt Curry <matt@pseudocoder.com>
 * @license     MIT
 *
 */

/* Description */
A CakePHP plugin that allows for creating custom find types by simply adding a new method to the model.

/* Install */
1) Download the plugin to /app/plugin/find

2) Include the FindAppModel in your app_model.php
App::import('Vendor', 'Find.find_app_model');

3) Have your AppModel extend FindAppModel instead of Model
class AppModel extends FindAppModel {

}

/* Usage */
1) Call custom find types with the pattern:
$this->Model->find('custom_find_type');

2) In your model create functions that match the find type with "__find" prefixed and the find type CamelCased:
function __findCustomFindType($options) {
  //do find here
}

/* How To Paginate */
This is pretty simple thanks Daniel Salazar (http://code621.com/content/10/easy-pagination-using-matt-curry-s-custom-find-types)
1) Add "paginate" => true to the $options array will return the $query array, which is suitable for using as your controllers $paginate parameter.  
   You probably want to merge that with the default controller pagination settings.
   $this->paginate = am($this->paginate, $this->Post->find('published', array('paginate' => true)));
   $this->set('posts', $this->paginate());

/* Why This Is A Vendor, Not A Model */
When doing App::import on a model Cake checks that the AppModel class already exists, otherwise it tries to import.  Since the AppModel is depended on the FindAppModel, it won't exist and will try to be included, leading to a infinite loop.
Something went wrong with that request. Please try again.