query guide framework espaƱol createcommand consultas app php sql-server yii2 sqlsrv

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.