Использование sfFilter для обновления БД с помощью Doctrine - PullRequest
2 голосов
/ 20 февраля 2011

Я создал sfFilter для обновления текущего модуля, в котором находится пользователь:


class SessionFilter extends sfFilter {
    public function execute($filterChain){
        if ($this->isFirstCall()){
            $user = $this->getContext()->getUser()->getId();
            $module = $this->getContext()->getModuleName();
            Doctrine::getTable('ActiveSession')->set($user, $module);
            Doctrine::getTable('ActiveSession')->refresh();
        }

        $filterChain->execute();
    }
}

Когда я посмотрел в БД, я обнаружил, что запись установила поле 'module' в'default', но когда я вижу журнал, он говорит:


UPDATE active_session SET module = 'secretary' WHERE (sys_user_id = '2')

Кто-нибудь знает, как исправить это поведение?

РЕДАКТИРОВАТЬ: я забыл поставить

метода set и refresh
class ActiveSessionTable extends Doctrine_Table
{
    public function set($userId, $module){
        $q = $this->createQuery()->update()
            ->set('module','?', $module)
            ->where("sys_user_id = ?", array($userId))->execute();
    }

    public function refresh(){
        $time = time() - sfConfig::get('app_session_keep') * 60;
        $this->createQuery()->delete()->where('time < ?', $time)->execute();
    }
    ...
}

Метод обновления следует использовать в другом методе, но для тестирования я оставляю его там.

1 Ответ

0 голосов
/ 29 марта 2011

Хорошо ... чтобы закрыть это.

Единственный способ, которым я мог выполнить то, что хотел, это проверить, был ли модуль «по умолчанию»:

class ActiveSessionTable extends Doctrine_Table
{
    public function set($userId, $module){
        if($module != 'default'){
            $q = $this->createQuery()->update()
               ->set('module','?', $module)
               ->where("sys_user_id = ?", array($userId))->execute();
        }
    }
   ...
}

действительно не счастливый ответно не смог найти нужного.

...