Posts Tagged ‘scope’
Scope Behavior
У меня возникла такая ситуация, что несколько сайтов с одинаковым движком используют одни и те же таблицы в одной базе данных. Для различения принадлежности записей в бд к сайтам используется поле site_id. Добавлять его к каждому запросу в условия довольно утомительно, поэтому я сделал специальный behavior для этой цели – Scope.
в модели (например, User) добавляем behavior и передаем ему настройки
<?php...var $actsAs = array('Scope.Scope' => array('field' => 'site_id','value' => SITE_ID,));...?>
теперь при вызове функций модели find или save условие будет добавляться автоматически, то есть
<?php...$this->User->find('all');...?>
будет эквивалентно
<?php...$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
Замечания и предложения приветствуются.
