szajbus / namedscopebehavior forked from netguru/namedscopebehavior

Behavior for CakePHP that allows use of named scopes with model's find() method.

This URL has Read+Write access

josegonzalez (author)
Thu Jul 30 21:14:41 -0700 2009
szajbus (committer)
Wed Aug 05 16:03:07 -0700 2009
name age message
file MIT-LICENSE Sun Aug 31 13:57:17 -0700 2008 copyrights update [netguru]
file README Tue Sep 16 14:24:50 -0700 2008 param name changed to 'scopes' due to confict w... [netguru]
file README.rdoc Tue Sep 16 14:24:50 -0700 2008 param name changed to 'scopes' due to confict w... [netguru]
directory models/ Loading commit data...
README.rdoc

NamedScopeBehavior

This is a behavior for CakePHP that allows use of named scopes with model’s find() method. What it does it translating defined scopes to conditions before extecuting find query.

Installation

Download and place named_scope.php file in app/models/behaviors folder of your CakePHP application.

Usage

Example of User model:

$actsAs = array(

  'NamedScope' => array(
    'activated' => array('User.activated' => 1),
    'online' => array('date_add(User.last_activity, interval 5 minute) > now()')
  )

);

Then in your controller (or anywhere else) you can do:

$this->User->find(‘all’, array(‘scopes’ => array(‘activated’)));

which is an equivalent to:

$this->User->find(‘all’, array(‘conditions’ => array(‘User.activated’ => 1)));

You can use many scopes at once and mix them with usually defined conditions:

$this->User->find(‘all’, array(‘condtions’ => array(‘User.admin’ => 1), ‘scopes’ => array(‘activated’, ‘online’)))

If you have associated models (hasOne or belongsTo) and they have named scopes defined you can use them all in one find query: $this->User->find(‘all’, array(‘scopes’ => (‘activated’, ‘Group.admins’))) // assuming that User belongsTo Group and Group model has ‘admins’ named scope defined.

Scopes works also with pagination (in your controller):

$paginate = array(

  'User' => array(
    'order' => 'created ASC',
    'limit' => 20,
    'scopes' => array('online', 'activated')
  )

)

Copyright

Copyright © 2008 Michal Szajbe (codetunes.com) and netguru (netguru.pl), released under the MIT license