Выберите схему и таблицу в sqlserver с Yii2?

У меня есть база данных 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'),
];
}
}
?>

5

Решение

Полное имя таблицы в MS SQL состоит из трех частей: схема, владелец и имя таблицы, например:

dbo.user1.table1

Это означает, что table1 был создан user1 в схеме dbo,

Если вы не знаете владельца или это пользователь по умолчанию (sa), вы можете передать это так:

dbo..table1

Поэтому я предлагаю вам попробовать

return 'schema2..transaction';

или же

return 'schema2.YOUR_USER_NAME_HERE.transaction';

для правильного разрешения имени таблицы из другой схемы.

3

Другие решения

хорошо я нашел ответ. Я не могу получить к нему доступ, потому что база данных использует sqlserver 2000 и мой драйвер не совместим с ним. После того, как я перенес его на SQL Server 2008, все предельно ясно. Надеюсь, это кому-нибудь поможет.

0

По вопросам рекламы [email protected]