繁体   English   中英

yii2上的多个数据库连接

[英]Multiple Databases Connection on yii2

我正在尝试在yii2框架上使用多个数据库连接。 在我的配置文件夹中的db.php文件下,我有这段代码:

return [
    'class' => 'yii\db\Connection',
    'components' => [
        'db1' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=new',
            'username' => 'root',
            'password' => 'password',
            'charset' => 'utf8',
        ],
        'db2' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=old',
            'username' => 'root',
            'password' => 'password',
            'charset' => 'utf8',
        ],
    ],
];

在models文件夹下的test.php中,我有以下内容...

namespace app\models;

use Yii;
use yii\base\Model;
use yii\db\Query;

class GetAds extends Model
{
    public function ads()
    {

        $test = Yii::$app->db1->createCommand((new \yii\db\Query)->select('*')->from('members'))->queryAll();

    }

当我尝试访问时,我收到此错误消息“获取未知属性:yii \\ web \\ Application :: db1”

我该如何解决这个问题? 我实际上遵循了本指南多个数据库连接和Yii 2.0

我哪里做错了?

最糟糕的是,我已经设置只使用一个数据库...在我的模型上,我使用这个代码..

    namespace app\models;

    use Yii;
    use yii\base\Model;
    use yii\db\ActiveRecord;
    use yii\db\Query;

    class GetAds extends ActiveRecord
    {
        public static function tableName()
        {
            return 'ads_page';
        }

        public static function ads()
        {

            $count=(new \yii\db\Query)->from('ads_page')->count('*'); 
    }
}

我得到了这个错误

Database Exception – yii\db\Exception
could not find driver
↵
Caused by: PDOException
could not find driver

为什么使用yii2这么难? 我从这里开始关注http://www.yiiframework.com/doc-2.0/guide-db-dao.html

请帮忙

我已经解决了这个问题。 这可能会帮助其他需要此功能的人。

在config / web.php下,我添加了这行“ 'db2' => require(__DIR__ . '/db2.php'), ”只是在这个语句下'db' => require(__DIR__ . '/db.php'), “(不带引号)

并使用与db.php中相同的代码在config文件夹下创建另一个新的db2.php文件:

<?php

return [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;dbname=test2',
    'username' => 'root',
    'password' => 'password',
    'charset' => 'utf8',
];

并调用第一个数据库。 我用这个:

$row = Yii::$app->db->createCommand("SELECT * FROM test")->queryOne(); 

要从第二个数据库查询表,我使用:

$row = Yii::$app->db2->createCommand("SELECT * FROM test2")->queryOne();
  1. 确保安装了php_mysqlphp_pdo_mysql扩展。
  2. \\yii\\db\\ActiveRecord类应该知道它正在使用什么数据库

这是您添加到模型中以使其了解其数据库的代码。

public static function getDb()
{
    return Yii::$app->get('db1');
}

你也可以这样做:

new User(array("db" => Yii::$app->db1));

或者这样做:

User::find()->where(...)->all(Yii::$app->db2);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM