2016-05-27 6 views
1

Ich habe die folgende Konfigurationsdateiyii2 Änderung Datenbank für admin und Website-Panel

common/main-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]); 
    } 

Site-Controller

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]); 
    } 

Ich möchte zum Ändern der Datenbank gehört zum Controller. Bitte geben Sie mir Hilfe. Ich habe zwei db verwendet, aber es tooks erste db-Datei.

Antwort

0

Sie können in der Konfigurations

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', 
    ], 
    ], 
]; 

und erhalten Ihre db mehr als ein db konfigurieren (das ist, wenn Sie einen direkten Befehl in der Steuerung und nicht für Activerecord verwenden möchten)

class yourController extends \yii\web\Controller 
{ 


    public function actionYourAction() 
    { 
     ... 

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

     .... 

    } 

Oder Sie können programmgesteuert mit der richtigen Einstellung verwalten

Wenn für Ihr Modell (wie Sie in Ihrem Code haben) Sie eine andere Datenbankverbindung als die db-Komponente verwenden möchten, yo u sollte die getDb() -Methode in Ihrem verwandten Active MODEL (siehe doc .. Link unten) außer Kraft setzen:

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

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

und nicht $my2DbConn = Yii::$app->db; in Controller zuweisen diese für create (direkte SQL-commend) und nicht für Active wie Sie benötigen ..

sehen in diesem Handbuch http://www.yiiframework.com/doc-2.0/guide-db-active-record.html oder diese Referenz für ähnlichen param http://www.yiiframework.com/doc-2.0/yii-db-connection.html

+0

Wir $ my2dbConn in jeder Aktion angeben sollen? – user5588802

+0

Sie können auf dem Niveau, das Sie ... in Controller auch tun, wenn Sie in allen Aktionen oder nur in der Aktion, die Sie benötigen .. Sie können auch im Modell tun und dann eine Funktion verwenden, um die db des Modells zu erhalten. .wie in der Anleitung .. – scaisEdge

+0

Es funktioniert nicht :( – user5588802

Verwandte Themen