ftdxl 2015-09-01 16:05:56 2664次浏览 1条回复 0 0 0

网站有个别模块需要使用独立的数据库,请问如何才能在一个项目中使用多个数据库? 如:$connection = new \yii\db\Connection([

'dsn' => $dsn,
 'username' => $username,
 'password' => $password,

]); $connection->open(); 这种办法可以独立使用一个数据库,可是有个缺点就是只能执行sql语句, 像text::find()->normalStatus()->count();这种的语句无法使用,这时会导致一个问题就是ActiveDataProvider分页组件使用不了,请问有什么解决办法吗?

  • 回复于 2015-09-01 16:20 举报

    可以类似这样处理。
    main-local.php:

    'components' => [
            'db' => [
                'class' => 'yii\db\Connection',
                'dsn' => 'mysql:host=192.168.80.1;dbname=test1;port=3306',
                'username' => 'root',
                'password' => '123456',
                'charset' => 'utf8',
            ],
    		'db2' => [
    			'class' => 'yii\db\Connection',
                'dsn' => 'mysql:host=192.168.80.1;dbname=test2;port=3306',
                'username' => 'root',
                'password' => '123456',
                'charset' => 'utf8',
    		],
    

    Model:

    $connection = \Yii::$app->get ( "db" );
    或
    $connection = \Yii::$app->get ( "db2" );
    
    9 条回复
    回复于 2015-09-01 16:24 回复

    可以给个详细一点的例子吗?

    回复于 2015-09-01 16:25 回复

    $connection = \Yii::$app->get ( "db2" );这个应该在哪里使用?才可以让model自动识别到正确的数据库中的表。

    回复于 2015-09-01 17:30 回复

    在对应表的model里设置你要使用哪个库

    回复于 2015-09-01 17:54 回复

    谢谢,找到设置办法了

    回复于 2015-12-22 11:35 回复

    请问是怎么设置的啊???

    回复于 2015-12-22 11:36 回复

    大侠请指导一下啊

    回复于 2015-12-26 16:43 回复

    在你需要独立使用数据库的模型里设置你要使用的数据库就可以了

    回复于 2015-12-27 15:46 回复

    在 需要独立使用数据库的模型里设置 要使用的数据库 就是这个问题了,不会设置,呃

    回复于 2016-01-06 14:14 回复

    层主的办法也是可以的,不过层主的办法是设置一个全局的数据库连接,如果你只是想独立链接一个数据库的话,可以在model中重写getDb方法,如下
    public static function getDb()

    {
        $connection = new \yii\db\Connection([
            'dsn' => 'mysql:host=localhost;dbname=xxx,
             'username' => 'root',
             'password' => '',
        ]);
        $connection->open();
    
        return $connection;
    }
    
    觉得很赞
您需要登录后才可以回复。登录 | 立即注册