2015-01-16 25 views
5

Mam bazę danych serwera sql, które mają wiele schematów. Próbowałem wybrać jedną z tabel z innego schematu za pomocą sterownika sqlsrv, ale mówi nieprawidłowa konfiguracja, tabela nie istnieje. Jak mogę wybrać schemat w tabeli przy użyciu sterownika sqlsrv?Wybierz Schemat i tabelę w sqlserver z 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', 
    ]; 
?> 

mój model

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

Czy można użyć Yii2 Migrate do utworzenia tabeli w SQL Server 2008? – Blackjack

Odpowiedz

0

dobrze znalazłem odpowiedź. Nie mogę uzyskać do niego dostępu, ponieważ baza danych używa sqlserver 2000 i mój sterownik nie jest z nią zgodny. Po migracji do serwera sql 2008 wszystko jest krystalicznie czyste. Mam nadzieję, że to pomoże każdemu.

3

Pełna nazwa tabeli w MS SQL składa się z trzech części: schemat, właściciela i nazwę tabeli, na przykład:

dbo.user1.table1 

Oznacza to, że table1 został stworzony przez user1 w schemacie dbo.

Jeśli nie znasz właściciela lub jest domyślny użytkownik (sa), można przekazać go tak:

dbo..table1 

więc proponuję wypróbować

return 'schema2..transaction'; 

lub

return 'schema2.YOUR_USER_NAME_HERE.transaction'; 

za poprawne rozwiązanie nazwy tabeli z innego schematu.

+0

wypróbował Twoje rozwiązanie, używając schematu2..transakcja zwróciła wartość SQLSTATE [42000]: [Microsoft] [SQL Server Native Client 10.0] [SQL Server] Nie można użyć pustych nazw obiektów lub kolumn. W razie potrzeby użyj pojedynczej spacji. Powrót drugiego rozwiązania Niepoprawna nazwa obiektu – Gamma

+0

To jest dziwne, kiedy próbuję schema2.xxx zwrócił Niepoprawną nazwę obiektu, ponieważ nie ma tabeli xxx, ale kiedy próbowałem schema2.transaction, wspomniana tabela nie istnieje. czy to błąd w Yii? – Gamma

+0

Próbowałem utworzyć tabelę do SQL Server poprzez Yii Migrate, ale zawiera tylko 2 części, na przykład: root.user. To powoduje problem podczas używania GII, ponieważ GII może odczytać dowolną tabelę w bazie danych, w jaki sposób mogę sprawić, by tabela zawierała trzy części, na przykład: dbo.root.user? – Blackjack