Yii2连接多个数据库
1、使用高级模板 yii2-app-advanced
2、设置 common\config\main-local.php 本地文件
'components' => [
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=yii2advanced',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
],
// 连接另个数据库,注意使用gii生成的时候选择对应的数据库
'blogdb' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=blogdb',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
// 'tablePrefix' => 'cp_', // 表前缀
],
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'viewPath' => '@common/mail',
// send all mails to a file by default. You have to set
// 'useFileTransport' to false and configure a transport
// for the mailer to send real emails.
'useFileTransport' => true,
],
...
],
3、第三步
3.1、第一种,使用 gii模式生成Model、controllers等,
- 选择更改的数据库名 Database Connection ID 改为 blogdb
- Table Name 改为 blogdb 中数据表名称 post
生成后的 models 中的模板 Post.php 中自动含有连接 blogdb 数据库的方法
public static function getDb()
{
return Yii::$app->get('blogdb');
}
3.2、手动创建对应 model
<?php
namespace common\models;
use Yii;
/**
* This is the model class for table "post".
*
* @property int $id
* @property string $title
* @property string $content
* @property string|null $tags
* @property int $status
* @property int|null $create_time
* @property int|null $update_time
* @property int $author_id
*
* @property Adminuser $author
* @property Comment[] $comments
* @property Poststatus $status0
*/
class Post extends \yii\db\ActiveRecord
{
/**
* {@inheritdoc}
*/
public static function tableName()
{
return 'post';
}
/**
* @return \yii\db\Connection the database connection used by this AR class.
*/
public static function getDb()
{
return Yii::$app->get('blogdb');
}
/**
* {@inheritdoc}
*/
public function rules()
{
return [
[['title', 'content', 'status', 'author_id'], 'required'],
[['content', 'tags'], 'string'],
[['status', 'create_time', 'update_time', 'author_id'], 'integer'],
[['title'], 'string', 'max' => 128],
[['author_id'], 'exist', 'skipOnError' => true, 'targetClass' => Adminuser::class, 'targetAttribute' => ['author_id' => 'id']],
[['status'], 'exist', 'skipOnError' => true, 'targetClass' => Poststatus::class, 'targetAttribute' => ['status' => 'id']],
];
}
/**
* {@inheritdoc}
*/
public function attributeLabels()
{
return [
'id' => 'ID',
'title' => 'Title',
'content' => 'Content',
'tags' => 'Tags',
'status' => 'Status',
'create_time' => 'Create Time',
'update_time' => 'Update Time',
'author_id' => 'Author ID',
];
}
/**
* Gets query for [[Author]].
*
* @return \yii\db\ActiveQuery
*/
public function getAuthor()
{
return $this->hasOne(Adminuser::class, ['id' => 'author_id']);
}
/**
* Gets query for [[Comments]].
*
* @return \yii\db\ActiveQuery
*/
public function getComments()
{
return $this->hasMany(Comment::class, ['post_id' => 'id']);
}
/**
* Gets query for [[Status0]].
*
* @return \yii\db\ActiveQuery
*/
public function getStatus0()
{
return $this->hasOne(Poststatus::class, ['id' => 'status']);
}
}