2015-01-16 25 views
5

Ich habe SQL-Server-Datenbank, die mehrere Schema haben. Ich habe versucht, aus einer der Tabelle aus anderen Schema mit sqlsrv Treiber auswählen, aber sagt ungültige Konfiguration, Die Tabelle existiert nicht. Wie kann ich das Schema in der Tabelle mit sqlsrv Treiber auswählen?Wählen Sie Schema und Tabelle in SQL Server mit 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', 
    ]; 
?> 

mein Modell

<?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

Haben Sie Yii2 Migrate für create table in SQL Server 2008 verwenden können? – Blackjack

Antwort

0

Nun, ich fand die Antwort. Ich kann nicht darauf zugreifen, weil die Datenbank sqlserver 2000 verwendet und mein Treiber nicht damit kompatibel ist. Nach der Migration auf SQL Server 2008 ist alles kristallklar. Hoffe das hilft jedem.

3

Der vollständige Name der Tabelle in MS SQL enthält drei Teile: schema, Eigentümer und Tabellennamen, zum Beispiel:

dbo.user1.table1 

Das bedeutet, dass die table1 im Schemavon user1 erstellt wurde.

Wenn Sie nicht den Besitzer wissen oder es Standardbenutzer (sa), können Sie es so passieren:

dbo..table1 

Deshalb schlage ich Ihnen

return 'schema2..transaction'; 

auszuprobieren oder

return 'schema2.YOUR_USER_NAME_HERE.transaction'; 

für das korrekte Auflösen des Tabellennamens aus anderem Schema.

+0

versuchte Ihre Lösung mithilfe von schema2..transaction zurückgegeben SQLSTATE [42000]: [Microsoft] [SQL Server Native Client 10.0] [SQL Server] Kann nicht leeres Objekt oder Spaltennamen verwenden. Verwenden Sie bei Bedarf ein einzelnes Leerzeichen. 2. Lösung Rückkehr Ungültiger Objektname – Gamma

+0

das ist seltsam, wenn ich versuche Schema2.xxx zurückgegeben Ungültige Objektname, weil es keine Tabelle xxx gibt, aber wenn ich versucht, schema2.transaction sagte Tabelle nicht vorhanden. ist es ein Fehler in yii? – Gamma

+0

Ich habe versucht, Tabelle in SQL Server über Yii Migrate zu erstellen, aber es enthält nur 2 Teile, Beispiel: root.user. Es verursacht ein Problem bei der Verwendung von GII, weil GII jede Tabelle in der Datenbank lesen kann, wie kann ich die Tabelle kann drei Teile enthalten, Beispiel: dbo.root.user? – Blackjack

Verwandte Themen