【问题标题】:Using a different Connection within Doctrine_Table in symfony 1.4 / sfMasterSlavePlugin在 symfony 1.4 / sfMasterSlavePlugin 的 Doctrine_Table 中使用不同的连接
【发布时间】:2010-07-05 15:32:42
【问题描述】:

在我的 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;
  }
}

【问题讨论】:

    标签: php symfony1 connection doctrine


    【解决方案1】:

    你可以这样做:

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

    【讨论】:

    • 您好约翰,感谢您的回复。我尝试了你的建议。 $conn 现在包含主连接,我用 var_dump($conn->getName()) 测试了它。但是,查询仍然使用从连接。我通过更改从连接的密码仔细检查了这一点,导致请求失败。谢谢,斯蒂芬
    【解决方案2】:

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

    我尝试了以下方法:

    public function fetchByLoginFromMaster($login)
    {
        $masterConn = ProjectConfiguration::getActive()->getMasterConnection();
    
        $this->setConnection($masterConn);
    
        $q = $this->createQuery()
                    ->from('User')
                    ->where('login = ?', $login)
                    ->fetchOne();
    
        return $q;
    }
    

    谢谢你, 斯蒂芬

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-13
      • 2012-05-05
      • 2023-04-06
      • 2017-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多