yii2更改管理员和站点面板的数据库

时间:2016-05-27 07:25:04

标签: yii2

我有以下配置文件

公共/主local.php

 return [
'components' => [
    'db' => [
        'class' => 'yii\db\Connection',
        'dsn' => 'mysql:host=localhost;dbname=aishwariya_basic2',
        'username' => 'root',
        'password' => '',
        'charset' => 'utf8',
    ],
    // 'db' => $db,
    'db2' => [
        'class' => 'yii\db\Connection',
        'dsn' => 'mysql:host=localhost;dbname=aishwariya_basic',
        'username' => 'root',
        'password' => '',
        'charset' => 'utf8',
    ],
    'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            'viewPath' => '@common/mail',
        ],
            // autoloading model and component classes
    'import'=> [
        'class' => 'yii2-widget-linkpager',
        'application.extensions.MyLinkPager.*',

],
  ],
];

Admincontroller

namespace frontend\controllers;

use Yii;
use frontend\models\Site_login;
use frontend\models\EntryForm_model;
use frontend\models\Asal_page_model;
use frontend\models\Interest_page_model;
use frontend\models\Return_page_model;
use frontend\models\Daily_report_model;
use frontend\models\Changepassword;
use yii\base\InvalidParamException;
use yii\web\BadRequestHttpException;
use yii\web\Controller;
use yii\filters\VerbFilter;
use yii\filters\AccessControl;
use yii\helpers\ArrayHelper;
use yii\db\Query;

class AdminController extends Controller
{

    /**
     * @inheritdoc
     */
    public function behaviors()
    {
        return [
            'access' =>  [
                'class' => AccessControl::className(),
                'only' => ['index', 'signup'],
                'rules' => [
                    [
                        'actions' => ['index'],
                        'allow' => true,
                        'roles' => ['?'],
                    ],
                    [
                        'actions' => ['settings','changepassword'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],





            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'logout' => ['post'],
                ],
            ],

        ];
    }

    /**
     * @inheritdoc
     */
    public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
            'captcha' => [
                'class' => 'yii\captcha\CaptchaAction',
                'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
            ],
        ];
    }

#####Action index code starts here 

public function actionIndex()
    {

        $this->layout = 'admin';
        $my2DbConn = Yii::$app->db;

        $model = new Site_login();


        if ($model->load(Yii::$app->request->post()) ) 
            {

                if ($model->validate()) {
            $url = Yii::$app->getUrlManager()->getBaseUrl()."/admin/search";
              return $this->redirect($url);
                                        } 
           }
        return $this->render('index', ['model' => $model]);
    }

站点控制器

public function actionInitial()
{
    $this->layout = 'site'; 
    $my2DbConn = Yii::$app->db2;        
    $model=new Initial_model();
    if ($model->load(Yii::$app->request->post()))
    {
    }
return $this->render('initial',['model'=>$model]);
    }
我希望将数据库更改为属于控制器。请给我一些帮助。我使用了两个数据库,但是它占用了第一个db文件。

1 个答案:

答案 0 :(得分:0)

您可以在config

中配置多个db
return [
'components' => [
    'db' => [
        'class' => 'yii\db\Connection',
        'dsn' => 'mysql:host=localhost;dbname=testdb',
        'username' => 'demo',
        'password' => 'demo',
    ],
    'db2' => [
        'class' => 'yii\db\Connection',
        'dsn' => 'mysql:host=localhost;dbname=testdb2',
        'username' => 'demo2',
        'password' => 'demo2',
    ],
  ],
];

并获取你的数据库(如果你想在控制器中使用直接命令而不是在activeRecord中使用)

class yourController extends \yii\web\Controller
{


   public function actionYourAction()
   {
      ...

     $my2DbConn = Yii::$app->db2;

      ....

   }

或者您可以使用正确的设置以编程方式进行管理

如果对于您的模型(就像您的代码中那样),您希望使用除db组件之外的其他数据库连接,则应覆盖相关ActiveRecord模型中的getDb()方法(请参阅doc ..链接at底部):

class YourModel extends ActiveRecord  // eg: Initial_model
{
   // ...

   public static function getDb()
   {
      // use the "db2" application component
      return \Yii::$app->db2;  
   }
}

并且不在控制器中分配$my2DbConn = Yii::$app->db;这是用于createCommand(直接sql表达)而不是像你需要的那样用于activeRecord ..

请参阅本指南http://www.yiiframework.com/doc-2.0/guide-db-active-record.html或此参考相关参数http://www.yiiframework.com/doc-2.0/yii-db-connection.html