用Yii2在sqlserver中选择Schema和表?
我有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'),
];
}
}
?>
好吧,我找到了答案。我无法访问它,因为数据库正在使用sqlserver 2000,而我的驱动程序与它不兼容。在我将其迁移到SQL Server 2008之后,一切都清晰可见。希望这有助于任何人。
在MS SQL完整的表名包含三个部分:模式,所有者和表名,例如:
dbo.user1.table1
这意味着table1
由模式0123中的user1
创建。
如果你不知道主人或者是默认的用户(sa
),你可以通过这样的:
dbo..table1
因此,我建议你尝试
return 'schema2..transaction';
或
return 'schema2.YOUR_USER_NAME_HERE.transaction';
用于正确解析来自不同模式的表名。
尝试过您的解决方案,使用schema2..transaction返回SQLSTATE [42000]:[Microsoft] [SQL Server Native Client 10.0] [SQL Server]不能使用空对象或列名称。如有必要,请使用一个空格。 第二个解决方案返回无效的对象名称 – Gamma
这很奇怪,当我尝试schema2.xxx它返回无效的对象名称,因为没有表xxx,但是当我试图schema2.transaction它说表不存在。是yii中的bug吗? – Gamma
我试过通过Yii Migrate创建表到SQL Server中,但它只包含2个部分,例如:root.user。它在使用GII时会导致一个问题,因为GII可以读取数据库中的任何表格,我该如何使表格可以包含三个部分,例如:dbo.root.user? – Blackjack
您是否可以使用Yii2 Migrate将表创建到SQL Server 2008? – Blackjack