【问题标题】:Yii multiple database connections [closed]Yii多个数据库连接[关闭]
【发布时间】:2013-06-19 10:47:19
【问题描述】:

我有一个三个数据库,每个数据库都有相同的表和相同的字段,但是我不知道如何在 Yii 中同时从所有三个数据库中获取所有记录。

请帮忙

【问题讨论】:

  • 连接表时使用别名。
  • 您可能正在寻找sharding - Yii 核心 ATM 不支持它。
  • 谢谢迈克尔,这是我正在寻找的一个术语,我需要数据库分片

标签: php mysql yii


【解决方案1】:

只需将新的数据库连接添加到 config/main.php

    'db1'=>array(
        'connectionString' => 'mysql:host=localhost;dbname=database1',
        'emulatePrepare' => true,
        'username' => 'root',
        'password' => '',
        'charset' => 'utf8',
    ),

    'db2'=>array(
        'connectionString' => 'mysql:host=localhost;dbname=database2',
        'username' => 'root',
        'password' => '',
        'class'=>'CDbConnection',          // DO NOT FORGET THIS!
    ),

现在您可以像这样连接到您的数据库:

Yii::app()->db1 ...
Yii::app()->db2 ...

查看这篇文章以获得更多解释:

http://www.yiiframework.com/wiki/123/multiple-database-support-in-yii/

还有这个:

http://www.yiiframework.com/wiki/78/multiple-databases-and-multiple-domains/

【讨论】:

    【解决方案2】:

    1.我们将从配置数据库连接开始。打开 protected/config/main.php 并按照指南中的说明定义主连接:

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

    2.然后复制它,将“db”组件重命名为“db2”并相应地更改连接字符串。另外,您需要添加类名,如下所示:

    'db2'=>array(
        'class'=>'CDbConnection',
        'connectionString' => 'mysql:host=localhost;dbname=db2',
        'emulatePrepare' => true,
        'username' => 'root',
        'password' => '',
        'charset' => 'utf8',
    ),
    

    3.然后复制它,将“db”组件重命名为“db3”并相应地更改连接字符串。另外,您需要添加类名,如下所示:

    'db2'=>array(
        'class'=>'CDbConnection',
        'connectionString' => 'mysql:host=localhost;dbname=db2',
        'emulatePrepare' => true,
        'username' => 'root',
        'password' => '',
        'charset' => 'utf8',
    ),
    

    4.就是这样。现在,您有两个数据库连接,可以将它们与 DAO 和查询构建器一起使用,如下所示:

    $db1Rows = Yii::app()->db->createCommand($sql)->queryAll();
    $db2Rows = Yii::app()->db2->createCommand($sql)->queryAll();
    $db3Rows = Yii::app()->db2->createCommand($sql)->queryAll();
    

    【讨论】:

    • 谢谢南河,但这不是我要找的,我需要同时从所有三个数据库中获取结果(一个查询/一行)
    • 您可以编写自己的函数示例 getAllData(){ $sql="SELECT * FROM table_name"; $db1Rows = Yii::app()->db->createCommand($sql)->queryAll(); $db2R​​ows = Yii::app()->db2->createCommand($sql)->queryAll(); $db3Rows = Yii::app()->db2->createCommand($sql)->queryAll(); return array_merge($db1Rows,$db2R​​ows ,$db3Rows );
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 2011-10-19
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    相关资源
    最近更新 更多