2015-01-16 89 views
5

我有SQL Server數據庫有多個架構。我試圖從使用sqlsrv驅動程序的不同架構的表中選擇一個,但表示不存在。 如何使用sqlsrv驅動程序選擇表中的模式?用Yii2在sqlserver中選擇Schema和表?

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

我的模型

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

您是否可以使用Yii2 Migrate將表創建到SQL Server 2008? – Blackjack

回答

0

好吧,我找到了答案。我無法訪問它,因爲數據庫正在使用sqlserver 2000,而我的驅動程序與它不兼容。在我將其遷移到SQL Server 2008之後,一切都清晰可見。希望這有助於任何人。

3

在MS SQL完整的表名包含三個部分:模式,所有者和表名,例如:

dbo.user1.table1 

這意味着table1由模式0123中的user1創建。

如果你不知道主人或者是默認的用戶(sa),你可以通過這樣的:

dbo..table1 

因此,我建議你嘗試

return 'schema2..transaction'; 

return 'schema2.YOUR_USER_NAME_HERE.transaction'; 

用於正確解析來自不同模式的表名。

+0

嘗試過您的解決方案,使用schema2..transaction返回SQLSTATE [42000]:[Microsoft] [SQL Server Native Client 10.0] [SQL Server]不能使用空對象或列名稱。如有必要,請使用一個空格。 第二個解決方案返回無效的對象名稱 – Gamma

+0

這很奇怪,當我嘗試schema2.xxx它返回無效的對象名稱,因爲沒有表xxx,但是當我試圖schema2.transaction它說表不存在。是yii中的bug嗎? – Gamma

+0

我試過通過Yii Migrate創建表到SQL Server中,但它只包含2個部分,例如:root.user。它在使用GII時會導致一個問題,因爲GII可以讀取數據庫中的任何表格,我該如何使表格可以包含三個部分,例如:dbo.root.user? – Blackjack