2015-01-16 44 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