2009-01-21
Named Scope для CakePHP
В Ruby on Rails есть такая полезная вещь, как named scope, которая предоставляет элегантный и удобный способ поиска данных в модели. Для наглядности пример:
class User {:active => true}
named_scope :inactive, :conditions => {:active => false}
end
# Использование
User.active # то же самое, что и User.find(:all, :conditions => {:active => true})
User.inactive # то же самое, что и User.find(:all, :conditions => {:active => false})
Теперь такую же штуку можно получить и в CakePHP. Для этого придется сходить вот сюда и скачать плагин NamedScope, положить его в папку с плагинами кэйка, а потом в модели написать:
var $actsAs = array(
'NamedScope.NamedScope' => array(
'active' => array(
'conditions' => array(
'User.is_active' => true
)
)
)
);
а потом в контроллере можно писать так:
$active_users = $this->User->active('all');
или так:
$active_users = $this->User->find('active');
причем при каждом вызове можно добавлять все те же параметре, что и при обычном find.
$active_users = $this->User->find('active', array(
'conditions' => array(
'User.created' => '2008-01-01'
),
'order' => 'User.name ASC'
));
параметры, переданные в find, будут иметь приоритет над определенными в named scope.