You are viewing revision #1 of this wiki article.
This version may not be up to date with the latest version.
You may want to view the differences to the latest version.
- Intro
- Connection to MSSQL
- Using MSSQL database as the 2nd DB in the Yii2 project
- Creating models in Gii for remote MSSQL tables
Intro ¶
Hi. I had to split my article as max length was reached. Check my previous articles here:
- https://www.yiiframework.com/wiki/2552/yii-v2-snippet-guide
- https://www.yiiframework.com/wiki/250/yii-for-beginners
- https://www.yiiframework.com/wiki/462/yii-for-beginners-2
Connection to MSSQL ¶
You might need MSSQL drivers in PHP. Based on your system you have to download different driver. The differences are x64 vs x86 and ThreadSafe vs nonThreadSafe. In Windows I always use ThreadSafe. Explanation.
Newest PHP drivers are here.
- Drivers v5.8 = PHP 7.2 - 7.4
Older PHP drivers here.
- Drivers v4.0 = PHP 7.0 - 7.1
- Drivers v3.2 = PHP 5.x
Once drivers are downloaded and extracted, pick one DLL file and place it into folder "php/ext". On Windows it might be for example here: "C:\xampp\php\ext"
Note: In some situations you could also need these OBDC drivers, but I am not sure when:
Now file php.ini must be modified. On Windows it might be placed here: "C:\xampp\php\php.ini". Open it and search for rows starting with word "extension" and paste there cca this:
extension={filename.dll}
// Example:
extension=php_pdo_sqlsrv_74_ts_x64.dll
Now restart Apache and visit phpinfo() web page. You should see section "pdo_sqlsrv". If you are using XAMPP, it might be on this URL: http://localhost/dashboard/phpinfo.php.
Then just add connection to your MSSQL DB in Yii2 config. In my case the database was remote so I needed to create 2nd DB connection. Read next chapter how to do it.
Using MSSQL database as the 2nd DB in the Yii2 project ¶
Adding 2nd database is done like this in yii-config:
'db' => $db, // the original DB
'db2'=>[
'class' => 'yii\db\Connection',
'driverName' => 'sqlsrv',
// I was not able to specify database like this:
// 'dsn' => 'sqlsrv:Server={serverName};Database={dbName}',
'dsn' => 'sqlsrv:Server={serverName}',
'username' => '{username}',
'password' => '{pwd}',
'charset' => 'utf8',
],
That's it. Now you can test your DB like this:
$result = Yii::$app->db2->createCommand('SELECT * FROM {tblname}')->queryAll();
var_dump($result);
Note that in MSSQL you can have longer table names. Example: CATEGORY.SCHEMA.TBL_NAME
And your first test-model can look like this (file MyMsModel.php):
namespace app\models;
use Yii;
use yii\helpers\ArrayHelper;
class MyMsModel extends \yii\db\ActiveRecord
{
public static function getDb()
{
return \Yii::$app->db2;
}
public static function tableName()
{
return 'CATEGORY.SCHEMA.TBL_NAME';
}
}
Usage:
$result = MyMsModel::find()->limit(2)->all();
var_dump($result);
Creating models in Gii for remote MSSQL tables ¶
Once you have added the 2nd database (read above) go to the Model Generator in Gii. Change there the DB connection to whatever you named the connection in yii-config (in the example above it was "db2") and set tablename in format: SCHEMA.TBL_NAME. If MSSQL server has more databases, one of them is set to be the main DB. This will be used I think. I haven't succeeded to change the DB. DB can be set in the DSN string, but it had no effect in my case.
User Contributed Notes
Leave a comment
If you have any questions, please ask in the forum instead.
Join the conversation to share a note.