在symfony 1.4 / sfMasterSlavePlugin中使用Doctrine_Table中的不同连接

时间:2010-07-05 15:32:43

标签: php symfony1 connection doctrine

在我的symfony项目中,我正在使用doctrine来处理我的数据模型。此外,我安装了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 :(得分:0)

你可以做的是:

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

答案 1 :(得分:0)

我还尝试在执行查询之前将连接显式设置为master。但同样,奴隶连接用于执行查询。

我尝试了以下内容:

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

    $this->setConnection($masterConn);

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

    return $q;
}

谢谢你, 斯蒂芬