【问题标题】:Yii : multiple databases connection failsYii : 多个数据库连接失败
【发布时间】:2012-10-08 09:02:06
【问题描述】:

我阅读了 yii 文档,下面的代码应该可以工作;

好吧,它没有。 :))

db 是主数据库

db1 和 db2 是辅助数据库

这里有什么问题?

网站在线,www.linkbook.co,但无法连接到任何数据库

'db' => array(
    'connectionString' => 'mysql:host=localhost;dbname=linkbookco',
    'emulatePrepare' => true,
    'username' => 'user',
    'password' => 'password',
    'charset' => 'utf8',
    'tablePrefix' => '',
),

    'db1' => array(
    'connectionString' => 'mysql:host=localhost;dbname=linkbookco1',
    'username'         => 'user',
    'password' => 'password',
    'charset' => 'utf8',
    'tablePrefix' => '',
    'class'            => 'CDbConnection'          // DO NOT FORGET THIS!
),

    'db2' => array(
    'connectionString' => 'mysql:host=localhost;dbname=linkbookco2',
    'username'         => 'user',
    'password' => 'password',
    'charset' => 'utf8',
    'tablePrefix' => '',
    'class'            => 'CDbConnection'          // DO NOT FORGET THIS!
),

【问题讨论】:

  • 选择查询现在可以工作了,真的不知道如何在辅助数据库中插入信息

标签: database yii multiple-databases


【解决方案1】:

dbYii 的预定义组件,因此默认CActiveRecord 使用db 进行连接。因此,对于您使用 CDbConnection 类创建的其他组件,您必须在外部为它们激活连接。

所以你需要覆盖CActiveRecordgetDbConnection()方法。

为特定的数据库连接扩展CActiveRecord,例如db1。 将其保存为Db1CActiveRecord.php 并放置在组件目录中。

<?php
/**
 * 
 * Used for db1 database connection
 *
 */
class Db1CActiveRecord extends CActiveRecord {

    private static $db1 = null;

    public function getDbConnection()
    {
        if (self::$db1 !== null)
            return self::$db1;
        else
        {
            self::$db1 = Yii::app()->db1;
            if (self::$db1 instanceof CDbConnection)
            {
                self::$db1->setActive(true);
                return self::$db1;
            }
            else
                throw new CDbException(Yii::t('yii','Active Record requires a "db" CDbConnection application component.'));
        }
    }
}

现在您需要将Db1CActiveRecord 用于数据库db1 的模型类。 喜欢:

class Db1Model extends Db1CActiveRecord{
   ......
}

对 db1 和 db2 数据库都采用这种方式。

【讨论】:

  • 10x,另外,如果我想设置一个参数,从 1 到 999999,自动更改数据库的参数,我该怎么做?
  • 我有 1 个主数据库和许多辅助数据库,主数据库知道需要在哪里分配信息,使用参数,值从 1 到 .... 999999;如何修改上述类以使连接/sql 注入对任何给定的 db 参数起作用? :)
  • 你必须遵循我为多个数据库编写的内容但是在 Yii 中我们不能在两个数据库之间创建关系。为此,我们必须执行自定义 sql 查询。还是我没有得到你的问题?
  • 我的系统,linkbook.co 会每天解析一些网站并将新的 urls/articles 存储在主数据库中;但是,我有 2 GB / 网站的限制,所以我有辅助数据库;每个网站都分配给一个数据库; id从1开始到N; N=1,无穷大;数据库的名称如下:linkbook1、linkbook2、linkbook3、...、linkbookN;我不知道如何在网站分配到的数据库中插入网址/文章
  • 因此,每个信息也应该放在辅助数据库中;这是我卡住的地方,因为我不知道如何使用 ID 更改数据库
猜你喜欢
  • 2019-06-30
  • 1970-01-01
  • 2015-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-12
  • 2023-03-02
相关资源
最近更新 更多