Использование другого соединения в Doctrine_Table в symfony 1.4 / sfMasterSlavePlugin - PullRequest
1 голос
/ 05 июля 2010

В моем проекте Symfony я работаю с доктриной для моих моделей данных.Также у меня установлен sfMasterSlavePlugin для использования разных соединений для разных типов запросов (запись против чтения).

Из-за небольшой задержки в репликации mysql мой код не может получить недавно вставленную запись.Чтобы обойти эту проблему, я хочу установить мастер-соединение для этого запроса на чтение.Но я также хочу иметь контекст Doctrine_Table для правильной работы с моей моделью.

Есть ли способ принудительно установить мастер-соединение в методе Doctrine_Table?И как это можно сделать?

Мой класс в настоящее время выглядит так:

class UserTable extends Doctrine_Table
{

public static function getInstance()
{
    return Doctrine_Core::getTable('User');
}

public function fetchByLoginFromMaster($login)
{
    $q = $this->createQuery()
                ->from('User')
                ->where('login = ?', $login)
                ->fetchOne();

    return $q;
  }
}

Ответы [ 2 ]

0 голосов
/ 06 июля 2010

Я также пытался явно установить соединение с мастером перед выполнением запроса. Но опять же, подчиненное соединение использовалось для выполнения запроса.

Я попробовал следующее:

public function fetchByLoginFromMaster($login)
{
    $masterConn = ProjectConfiguration::getActive()->getMasterConnection();

    $this->setConnection($masterConn);

    $q = $this->createQuery()
                ->from('User')
                ->where('login = ?', $login)
                ->fetchOne();

    return $q;
}

Спасибо, Stephan

0 голосов
/ 05 июля 2010

Что вы можете сделать, это:

public function fetchByLoginFromMaster($login)
{
  $conn = ProjectConfiguration::getActive()->getMasterConnection();
  $q = Doctrine_Query::create($conn)
                ->from('User')
                ->where('login = ?', $login)
                ->fetchOne();
  return $q;
}
...