LaravelでSQL Serverを使う方法|接続設定からエラー対処まで完全解説
Laravelといえば、MySQLやMariaDBと組み合わせて使われることが多いフレームワークです。
しかし、企業システムや既存業務システムとの連携では、SQL Serverを使いたいケースも少なくありません。
たとえば、次のような場面です。
-
社内の基幹システムがSQL Serverで動いている
-
既存データベースがSQL Serverで構築されている
-
WindowsサーバーやMicrosoft系技術との親和性を重視したい
-
Laravelで新しい画面やAPIだけを作り、DBはSQL Serverを使いたい
このような場合、LaravelでもSQL Serverは十分利用できます。
ただし、MySQLと違って環境構築やドライバ設定でつまずきやすく、接続エラーや文字コード、認証方式の問題などが発生することがあります。
特に初心者のうちは、次のような疑問を持ちやすいです。
-
LaravelはSQL Serverにそのまま接続できるのか
-
.envには何を書けばよいのか -
PDOやODBCドライバは必要なのか
-
WindowsとLinuxで設定は違うのか
-
接続できないときは何を確認すればよいのか
-
日本語や日時型、NULLは正しく扱えるのか
この記事では、LaravelでSQL Serverを使う方法について、接続設定から動作確認、マイグレーション、トラブルシューティングまでできるだけわかりやすく解説します。
単なる設定の羅列ではなく、なぜその設定が必要なのか、どこでつまずきやすいのかまで整理して紹介します。
LaravelでSQL Serverは使えるのか
結論から言うと、LaravelはSQL Serverに対応しています。
Laravelのデータベース機能はPDOを通じて複数のDBを扱えるようになっており、SQL Server用のドライバが正しく入っていれば接続可能です。
Laravelでは標準で以下のようなDB接続が扱えます。
-
MySQL
-
PostgreSQL
-
SQLite
-
SQL Server
つまり、Laravel側の仕組みとしては最初からSQL Serverを使う前提があります。
ただし、実際に動かすにはPHP側に必要な拡張やドライバが必要になります。
LaravelでSQL Serverを使う前に必要なもの
LaravelからSQL Serverへ接続するには、次の要素がそろっている必要があります。
1. Laravel本体
当然ですが、Laravelプロジェクトが作成済みである必要があります。
2. PHPのSQL Server用拡張
LaravelがSQL Serverへ接続する際は、PHPからPDO経由でアクセスします。
そのため、PHP側にSQL Server用のドライバが必要です。
代表的には次の2つです。
-
sqlsrv -
pdo_sqlsrv
3. Microsoft ODBC Driver for SQL Server
特にLinuxやmacOSでは、このODBCドライバが必要になることがあります。
Windowsでも環境によっては確認が必要です。
4. SQL Server本体
接続先となるSQL Serverインスタンスが必要です。
ローカルでもリモートでも構いません。
5. 接続情報
最低限、次の情報を把握しておく必要があります。
-
ホスト名またはIPアドレス
-
ポート番号
-
データベース名
-
ユーザー名
-
パスワード
-
認証方式
LaravelでSQL Serverを使う全体の流れ
まず全体像を整理すると、設定の流れは次のようになります。
-
SQL Server用のPHP拡張を入れる
-
必要に応じてODBC Driverを入れる
-
Laravelの
.envをSQL Server用に設定する -
config/database.phpの設定を確認する -
接続確認を行う
-
マイグレーションやクエリ実行を試す
-
接続エラーが出たら原因を切り分ける
この順番で進めると、問題が起きてもどこで止まっているか把握しやすくなります。
.envでSQL Server接続を設定する方法
Laravelでは通常、DB接続情報を .env に記述します。
SQL Serverを使う場合は、次のような設定になります。
DB_HOST=127.0.0.1
DB_PORT=1433
DB_DATABASE=sample_db
DB_USERNAME=sa
DB_PASSWORD=your_password
各項目の意味
-
DB_CONNECTION
使用するDBドライバ名です。SQL Serverならsqlsrvを指定します。 -
DB_HOST
SQL Serverのホスト名またはIPアドレスです。ローカルなら127.0.0.1やlocalhostが使われます。 -
DB_PORT
SQL Serverの標準ポートは1433です。変更している場合はそのポートを指定します。 -
DB_DATABASE
接続したいデータベース名です。 -
DB_USERNAME
SQL Serverログインのユーザー名です。 -
DB_PASSWORD
そのユーザーのパスワードです。
config/database.php のsqlsrv設定を確認する
Laravelには最初からSQL Server用の設定が用意されていることが多いです。config/database.php の中に、次のような sqlsrv 設定があるか確認してください。
'driver' => 'sqlsrv',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '1433'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => env('DB_CHARSET', 'utf8'),
'prefix' => '',
'prefix_indexes' => true,
],
通常は .env 側を正しく書けば十分ですが、プロジェクトによってはこの定義が削除・変更されていることがあります。
その場合は driver => 'sqlsrv' になっているか確認しましょう。
SQL Server用PHP拡張が必要な理由
LaravelがSQL Serverへ接続するには、PHP自体がSQL Serverと通信できる必要があります。
Laravelだけ設定しても、PHPに必要な拡張がなければ接続できません。
とくに重要なのは次の2つです。
-
sqlsrv -
pdo_sqlsrv
このうち、LaravelでPDO接続を使うには pdo_sqlsrv が特に重要です。
確認方法
次のコマンドでPHPの拡張一覧を確認できます。
その中に次が含まれているか見ます。
pdo_sqlsrv
または、より絞って確認するなら次でも構いません。
Windows以外の環境では grep が使える場合があります。
Windows環境でLaravelとSQL Serverを接続する基本
Windows環境では、比較的SQL Serverとの相性が良く、設定しやすいケースが多いです。
ただし、PHP拡張が有効化されていないと接続できません。
基本的な流れ
-
PHPのバージョンに合ったMicrosoft Drivers for PHP for SQL Serverを用意する
-
php.iniで拡張を有効にする -
Webサーバーを再起動する
-
php -mで読み込まれているか確認する
php.ini での例
extension=php_pdo_sqlsrv.dll
ファイル名はPHPバージョンや環境によって異なることがあります。
設定後はApacheやPHP-FPM、Laravel Sail、XAMPPなど使っている環境に応じて再起動が必要です。
Linux環境でLaravelとSQL Serverを接続する基本
Linuxでは、Windowsよりも事前準備が少し多くなります。
通常は、PHP拡張に加えて Microsoft ODBC Driver が必要になります。
よくある流れは次のようになります。
-
Microsoftのリポジトリを追加
-
ODBC Driver for SQL Server をインストール
-
PHP用
sqlsrvとpdo_sqlsrvをインストール -
PHP-FPMやApacheを再起動
-
php -mで確認
環境によってコマンドは変わりますが、考え方としては
ODBCドライバ + PHP拡張 + Laravel設定
の3つがそろう必要があると覚えておくとわかりやすいです。
Docker環境でLaravelとSQL Serverを使う場合
最近はLaravelをDocker環境で動かすケースも多いです。
この場合、ホストOSではなくコンテナ内に必要な拡張を入れる必要があります。
つまり、ローカルPCにSQL Server用拡張を入れても、LaravelがDocker内で動いているなら意味がありません。
注意点
-
Dockerfile で
pdo_sqlsrvを導入する必要がある -
ODBC Driverもコンテナ内で必要になる
-
.envのDB_HOSTは127.0.0.1ではなく、SQL Serverコンテナ名や接続先ホスト名になることが多い -
コンテナ間ネットワークを確認する必要がある
よくあるミス
DB_HOST=127.0.0.1 にしてしまい、Laravelコンテナ自身を見に行って接続失敗するケースです。
Dockerでは 127.0.0.1 はそのコンテナ自身を指すため、別コンテナのSQL Serverにはつながりません。
LaravelでSQL Server接続を確認する方法
設定が終わったら、まずは本当に接続できるか確認します。
artisan tinker を使う方法
その後、次のように実行します。
接続できればPDOオブジェクトが返ります。
失敗すれば例外が表示されます。
シンプルなSELECTを試す方法
Route::get('/test-db', function () {
$result = DB::select('SELECT 1 AS test');
return $result;
});
ブラウザで /test-db にアクセスして結果が返れば、接続自体は成功しています。
SQL Serverでマイグレーションは使えるのか
LaravelのマイグレーションはSQL Serverでも使えます。
ただし、一部の型や制約、デフォルト値の扱いでMySQLと違いが出ることがあります。
例: マイグレーションファイル
$table->id();
$table->string('name');
$table->string('email')->nullable();
$table->integer('age')->nullable();
$table->timestamps();
});
このような基本的なマイグレーションであれば、SQL Serverでも問題なく動くことが多いです。
実行
LaravelでSQL Serverを使うときの注意点
SQL Serverは使えますが、MySQLと完全に同じ感覚で使うとつまずくことがあります。
特に次の点は押さえておきたいところです。
1. 予約語に注意する
SQL Serverには予約語があり、テーブル名やカラム名に使うと問題になることがあります。
たとえば次のような単語は注意が必要です。
-
user
-
order
-
key
-
table
Laravelが自動でうまくクオートしてくれることもありますが、命名段階で避けるほうが安全です。
2. 自動採番や主キーの違い
Laravelの id() は通常問題なく使えますが、既存のSQL Serverテーブルと連携する場合、主キーやIDENTITY列の定義がLaravel側の想定と違うことがあります。
特に既存DBに対してEloquentを使う場合は、必要に応じてモデル側で設定します。
public $incrementing = true;
protected $keyType = 'int';
3. 文字コードや日本語
通常は問題なく扱えますが、接続設定やカラム型によっては文字化けの原因になることがあります。
SQL Serverでは NVARCHAR を使うかどうかも重要です。
Laravel側の設定だけでなく、DB設計側も見直す必要があります。
4. NULLの扱い
SQL ServerではNULLの扱いに注意が必要です。
これはMySQLでも同様ですが、既存SQLを流用する場合に差異が出ることがあります。
たとえば、NULL判定は必ず IS NULL を使います。
Laravelのクエリビルダでも同様に書けます。
5. 日付型と時刻型
SQL Serverには次のような型があります。
-
DATE
-
DATETIME
-
DATETIME2
-
TIME
Laravelの timestamps() は多くの場合使えますが、既存DBと連携する場合は型の違いに注意してください。
LaravelでSQL Serverを使う基本的なクエリ例
接続できたら、通常どおりクエリビルダやEloquentが使えます。
データ取得
条件付き取得
->where('email', 'test@example.com')
->first();
NULL検索
->whereNull('deleted_at')
->get();
追加
'name' => '田中',
'email' => 'tanaka@example.com',
]);
更新
->where('id', 1)
->update(['name' => '佐藤']);
削除
->where('id', 1)
->delete();
Si quieres conocer otros artículos parecidos a LaravelでSQL Serverを使う方法|接続設定からエラー対処まで完全解説 puedes visitar la categoría Sisutemuunyo.
