使用Yii2在sqlserver中选择Schema和table?

时间:2015-01-16 07:39:30

标签: php sql-server yii2 sqlsrv

我有sql server数据库,它有多个架构。我尝试使用sqlsrv驱动程序从不同模式的表中选择一个,但是表示无效配置,该表不存在。 如何使用sqlsrv驱动程序在表中选择架构?

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

2 个答案:

答案 0 :(得分:3)

MS SQL中的完整表名包含三个部分:架构,所有者和表名,例如:

dbo.user1.table1

这意味着table1是由user1架构dbo创建的。

如果您不知道所有者或它是默认用户(sa),您可以像这样传递:

dbo..table1

所以我建议你试试

return 'schema2..transaction';

return 'schema2.YOUR_USER_NAME_HERE.transaction';

正确解析来自不同架构的表名。

答案 1 :(得分:0)

我找到了答案。我无法访问它,因为数据库使用sqlserver 2000并且我的驱动程序与它不兼容。我将它迁移到sql server 2008后一切都清晰。希望这对任何人都有帮助。