Scope Behavior
У меня возникла такая ситуация, что несколько сайтов с одинаковым движком используют одни и те же таблицы в одной базе данных. Для различения принадлежности записей в бд к сайтам используется поле site_id. Добавлять его к каждому запросу в условия довольно утомительно, поэтому я сделал специальный behavior для этой цели — Scope.
в модели (например, User) добавляем behavior и передаем ему настройки
var $actsAs = array(
'Scope.Scope' => array(
'field' => 'site_id',
'value' => SITE_ID,
)
);
теперь при вызове функций модели find или save условие будет добавляться автоматически, то есть
$this->User->find('all');
будет эквивалентно
$this->User->find('all', array(
'conditions' => array(
'User.site_id' => SITE_ID,
)
);
Пользоваться, конечно, следует с осторожностью, так как некоторые операции, например updateAll и deleteAll c $cascade=false работают напрямую с источником данных и behavior остается не у дел (deleteAll c $cascade=true будет работать как и ожидается, с подстановкой параметров).
Исходный код лежит на гитхабе - http://github.com/evilbloodydemon/cakephp-scope
Замечания и предложения приветствуются.