2015-01-16 13 views
5

Ho un database SQL Server con più schemi. Ho provato a selezionare da una tabella da uno schema diverso utilizzando il driver sqlsrv, ma si dice configurazione non valida, la tabella non esiste. come posso selezionare lo schema nella tabella usando il driver sqlsrv?Seleziona schema e tabella in sqlserver con Yii2?

MyConnection

<?php 
    return [ 
     'class' => 'yii\db\Connection', 
     'dsn' => 'sqlsrv:Server=192.168.10.70;Database=mydatabase', // MS SQL Server, sqlsrv driver public ip 
     'username' => 'user_username', 
     'password' => 'user_password', 
     'charset' => 'utf8', 
    ]; 
?> 

mio modello

<?php 
    namespace app\models; 

    use Yii; 
    use yii\db\ActiveRecord; 

    class Transaction extends \yii\db\ActiveRecord 
    { 
     /** 
     * @inheritdoc 
     */ 
     public static function tableName() 
     { 
      return 'schema2.transaction'; 
     } 

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

     /** 
     * @inheritdoc 
     */ 
     public function rules() 
     { 
      return [[['id', 'number', 'amount', 'date', 'status', 'description'], 'required']]; 
     } 

     /** 
     * @inheritdoc 
     */ 
     public function attributeLabels() 
     { 
      return [ 
      'id' => Yii::t('app', 'Uid'), 
      'number' => Yii::t('app', 'Number'), 
      'date' => Yii::t('app', 'Date'), 
      'amount' => Yii::t('app', 'Amount'), 
      'description' => Yii::t('app', 'Item Description'), 
      'status' => Yii::t('app', 'status'), 
      ]; 
     } 
    } 
?> 
+0

È possibile utilizzare Yii2 Migrate per creare la tabella in SQL Server 2008? – Blackjack

risposta

0

ho trovato la risposta. Non riesco ad accedervi perché il database utilizza sqlserver 2000 e il mio driver non è compatibile con esso. Dopo averlo migrato a SQL Server 2008 tutto chiaro. Spero che questo aiuti chiunque.

3

Il nome della tabella completa in MS SQL contiene tre parti: lo schema, il proprietario e il nome della tabella, ad esempio:

dbo.user1.table1 

Ciò significa che lo table1 è stato creato da user1 nello schema dbo.

Se non si conosce il proprietario o è utente di default (sa), è possibile passare in questo modo:

dbo..table1 

Quindi vi consiglio di provare

return 'schema2..transaction'; 

o

return 'schema2.YOUR_USER_NAME_HERE.transaction'; 

per la corretta risoluzione del nome della tabella da diverso schema.

+0

ha provato la soluzione, utilizzando schema2..transaction restituito SQLSTATE [42000]: [Microsoft] [SQL Server Native Client 10.0] [SQL Server] Impossibile utilizzare nomi di oggetti o colonne vuoti. Utilizzare un singolo spazio se necessario. 2 ° ritorno soluzione Nome oggetto non valido – Gamma

+0

questo è strano, quando provo schema2.xxx restituito Nome oggetto non valido perché non esiste alcuna tabella xxx ma quando ho provato schema2.transaction ha detto che la tabella non esiste. è un bug in yii? – Gamma

+0

Ho provato a creare una tabella in SQL Server tramite Yii Migrate, ma contiene solo 2 parti, ad esempio root.user. Causa un problema durante l'utilizzo di GII, perché GII può leggere qualsiasi tabella nel database, come posso fare in modo che la tabella possa contenere tre parti, ad esempio: dbo.root.user? – Blackjack