php - guide - yii::$ app-> db-> createcommand
Seleccione Esquema y tabla en sqlserver con Yii2? (2)
Tengo una base de datos de servidor sql que tiene múltiples esquemas. Intenté seleccionar uno de tabla de esquema diferente usando el controlador sqlsrv pero dice que la configuración no es válida. La tabla no existe. ¿Cómo puedo seleccionar el esquema en la tabla usando el controlador sqlsrv?
mi conexión
<?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'',
];
?>
mi modelo
<?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''),
];
}
}
?>
Bueno, encontré la respuesta. No puedo acceder a él porque la base de datos está usando sqlserver 2000 y mi controlador no era compatible con él. Después de migrarlo al servidor sql 2008 todo es claro como el cristal. Espero que esto ayude a cualquiera.
El nombre completo de la tabla en MS SQL contiene tres partes: esquema, propietario y nombre de la tabla, por ejemplo:
dbo.user1.table1
Esto significa que la table1
fue creada por el user1
en el esquema dbo
.
Si no conoce al propietario o es usuario predeterminado ( sa
), puede pasarlo así:
dbo..table1
Así que te sugiero que pruebes
return ''schema2..transaction'';
o
return ''schema2.YOUR_USER_NAME_HERE.transaction'';
para la resolución correcta del nombre de la tabla de diferentes esquemas.