2015-05-26 12 views
5

Sto provando a utilizzare più connessioni al database su yii2 framework. Sotto il mio file db.php all'interno della cartella config, ho questo pezzo di codice:Connessione a più database su yii2

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

Nel mio test.php nella cartella modelli, ho questo qui sotto ...

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(); 

    } 

quando Provo ad accedere, ottengo questo messaggio di errore "Ottenere proprietà sconosciuta: yii \ web \ Application :: db1"

Come posso risolvere questo problema? Ho effettivamente seguito questa guida Multiple database connections and Yii 2.0

Dove ho sbagliato?

La cosa peggiore è, ho impostato per utilizzare un solo database ... e il mio modello, io uso questo codice ..

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('*'); 
    } 
} 

e ottengo questo errore

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

Perché usare yii2 così tanto? Ho seguire tutte da qui http://www.yiiframework.com/doc-2.0/guide-db-dao.html

si prega di aiutare

+0

Mi sembra questo non ha nulla a che fare con Yii a tutti ... "non riusciva a trovare il driver" sembra più un errore 'PDO'. Sei sicuro che tutti i moduli php rilevanti siano installati? 'DOP' da solo non è sufficiente, ha bisogno di' mysqlnd' pure iirc – Blizz

+0

@Blizz, grazie per il suggerimento, ho abilitato il pdo_mysql sotto le impostazioni PHP usando WAMP .... Questo risolve il problema PDO. – nodeffect

+0

unisci la tua configurazione di db con altri array di configurazione? – Tony

risposta

4

Ho risolto questo problema. Questo potrebbe aiutare gli altri che ne hanno bisogno.

Sotto config/web.php, ho aggiunto questa linea "'db2' => require(__DIR__ . '/db2.php')," poco meno di questa affermazione "'db' => require(__DIR__ . '/db.php')," (senza virgolette)

e ha creato un nuovo file db2.php sotto la cartella config utilizzando gli stessi codici in db.php:

<?php 

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

e chiamare il primo database. Io uso questo:

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

per interrogare tabella dal secondo database, io uso questo:

$row = Yii::$app->db2->createCommand("SELECT * FROM test2")->queryOne(); 
+1

se si utilizza più db in modalità master/slave quindi si verifica il link sottostante http://www.yiiframework.com/doc-2.0/guide-db-dao .html – kurmi

+0

Cosa succede se uso ActiveRecord invece di usare 'Yii :: $ app :: db-> createCommand..' ad esempio se ho già utilizzato metodi di registrazione attivi come' ModelName :: find() -> all() ' nella mia app, ora voglio che tutti i miei clienti usino db diversi per la loro azienda. come e dove devo dire all'applicazione quale database utilizzare? –

1
  1. Assicurarsi di avere i php_mysql e php_pdo_mysql estensioni installato.
  2. La classe \yii\db\ActiveRecord dovrebbe sapere quale database si sta lavorando con

Questo è il codice a voi aggiungere al modello per metterlo a conoscenza del suo database.

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

cosa succede se uso ActiveRecord invece di usare Yii :: $ app :: db-> createCommand ..ad esempio se ho già utilizzato metodi di registrazione attivi come ModelName :: find() -> all() nella mia app, ora voglio che tutti i miei clienti utilizzino db diversi per la loro azienda. come e dove devo dire all'applicazione quale database utilizzare? ActiveRecord fa sempre una chiamata a questa funzione 'getDb()' –

Problemi correlati