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',
],
],
];
在我的 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();
}
当我尝试访问时,收到此错误消息 "Getting unknown property: yii\web\Application::db1"
我该如何解决这个问题?我实际上已经遵循了本指南 Multiple database connections and 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
请帮忙
- 确保您有
php_mysql
和 php_pdo_mysql
扩展名
安装。
\yii\db\ActiveRecord
class 应该知道它使用的是什么数据库
这是添加到模型中以使其识别其数据库的代码。
public static function getDb()
{
return Yii::$app->get('db1');
}
我已经解决了这个问题。这可能会帮助其他需要它的人。
在 config/web.php 下,我在这条语句“'db' => require(__DIR__ . '/db.php'),
”(不带引号)下添加了这一行“'db2' => require(__DIR__ . '/db2.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();
要从第二个数据库查询 table,我使用这个:
$row = Yii::$app->db2->createCommand("SELECT * FROM test2")->queryOne();
您也可以这样做:
new User(array("db" => Yii::$app->db1));
或者这样做:
User::find()->where(...)->all(Yii::$app->db2);
我正在尝试在 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',
],
],
];
在我的 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();
}
当我尝试访问时,收到此错误消息 "Getting unknown property: yii\web\Application::db1"
我该如何解决这个问题?我实际上已经遵循了本指南 Multiple database connections and 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
请帮忙
- 确保您有
php_mysql
和php_pdo_mysql
扩展名 安装。 \yii\db\ActiveRecord
class 应该知道它使用的是什么数据库
这是添加到模型中以使其识别其数据库的代码。
public static function getDb()
{
return Yii::$app->get('db1');
}
我已经解决了这个问题。这可能会帮助其他需要它的人。
在 config/web.php 下,我在这条语句“'db' => require(__DIR__ . '/db.php'),
”(不带引号)下添加了这一行“'db2' => require(__DIR__ . '/db2.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();
要从第二个数据库查询 table,我使用这个:
$row = Yii::$app->db2->createCommand("SELECT * FROM test2")->queryOne();
您也可以这样做:
new User(array("db" => Yii::$app->db1));
或者这样做:
User::find()->where(...)->all(Yii::$app->db2);