【问题标题】:is it possible to "refresh" connection to db in runtime?是否可以在运行时“刷新”与数据库的连接?
【发布时间】:2014-02-28 08:14:38
【问题描述】:

这是我的问题。我有一个yii web projectmain.php 中定义的某个db 的连接,如下所示:

'db'=>array(
'pdoClass' => 'NestedPDO',  
'connectionString' =>'sqlite:/var/www/my_project/protected/data/runtime/myDb.db',  
'class'            => 'CDbConnection',
'schemaCachingDuration' => 100,  
),

在其中一个php 脚​​本中,我运行了一个复制新database 而不是旧的命令的命令。 问题是在脚本中我没有注意到变化。
例如,如果在数据库“myDb”中有一个名为 Table_1 的 table 包含 4 条记录,并且在新的“myDb”中该表包含 8 条记录,则在我的 php 脚本中,我将运行更改“ myDb" 我仍然会看到 "Table_1" 有 4 条记录。

【问题讨论】:

标签: php database activerecord yii


【解决方案1】:

Yii 可以配置为运行多个数据库,如果这正是您所寻找的 像这样的

...
'components' => array(
   'db'=>array(
      'pdoClass' => 'NestedPDO',  
      'connectionString' =>'sqlite:/var/www/my_project/protected/data/runtime/myDb.db',  
      'class'            => 'CDbConnection',
      'schemaCachingDuration' => 100,  
     ),
   'dbNew' => array(
       'pdoClass' => 'NestedPDO',  
       'connectionString' =>'sqlite:/var/www/my_project/protected/data/runtime/myDb_new.db',  
        'schemaCachingDuration' => 100,  
        'class'            => 'CDbConnection'          // DO NOT FORGET THIS!
    ),
    ...

定义后,第二个数据库称为Yii::app()->dbNew 而不是Yii::app()->db,当然第一个也可用于您的常规操作

【讨论】:

  • 如果我理解你的解决方案是正确的,那不是我需要的。在这种情况下,我不需要yii 来运行另一个数据库。只需更新原始版本已更改。数据库仍然在同一个位置,我想使用我已经拥有的 models 以同样的方式对其执行操作。
  • 您将只需要管理您的查询缓存配置,任何应用程序框架都会期望数据库一直在变化,如果您的查询没有缓存或缓存不正确,可能会反映旧数据,否则您将不需要进一步的改变。请注意,这是假设架构没有改变。 Yii Models(activeRecord) 期望您的架构与声明的一样,架构的更改需要由迁移管理
猜你喜欢
  • 1970-01-01
  • 2019-06-17
  • 2019-07-26
  • 1970-01-01
  • 2020-10-20
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
  • 1970-01-01
相关资源
最近更新 更多