Laravelによるデータベース処理の概観
Laravelには、他のフルスタックフレームワークと同様に、データベース処理を自動化する仕組みが含まれています。しかも、複数の選択肢が用意されています。ここでは、どのような方法が用意されているのかを概観しておきましょう。
基本はPDOによるSQL処理
Laravelのようなフルスタックフレームワークは、高機能ゆえに特別な処理を行っているように思えますが、ピュアPHPを離れて処理を行えるわけではありません。内部的には、あくまでピュアPHPで処理を行っており、その処理をどこまで隠蔽するかでフレームワークの違いが出てくるだけです。
データベース処理に関しても同じで、内部ではピュアPHPで利用されるPDOを利用してSQL処理を行っています。そのため、Laravelでは生のPDOを利用したSQL処理コードの記述にも対応しています。それが、次のコードです。
$db = DB::connection()->getPdo();
このコードで取得できる$dbがPDOインスタンスそのものですので、この$dbに対してピュアPHPで行うようなSQL処理コードを記述していけば問題なくデータベース処理を行えます。データベースへの接続と切断処理に関しては、Laravelが責任を持って行ってくれるのです。
Laravelのデータベース処理は3種類
とはいえ、ピュアPDO処理を記述するのであれば、Laravelを利用する旨味はありません。やはり、SQL処理をLaravelに任せた方が、利用するメリットがあります。
そこで、Laravelでデータベース処理を行おうとすると、次の方法が用意されています。
- SQLクエリ実行
- クエリビルダ
- Eloquent
これら3種類のデータベース処理の違いは、PDOによるSQL処理をどこまで隠蔽するかの違いです。SQLクエリ実行が一番隠蔽されておらず、逆に、Eloquentが一番隠蔽されています。
次節以降、それぞれについて解説を行っていきますが、これらのデータベース処理をきっちり解説しようとすると、それだけで1冊の書籍になってしまいます。そこで本稿では、あくまで触りだけ、簡単に解説するにとどめることをご了承ください。
データベース接続設定
前項で紹介した3種のデータベース処理方法、はたまたPDOを利用したSQL処理のどれを利用するにしても、あらかじめデータベース接続情報を記述しておく必要があります。データベース接続に関しての詳しい設定情報は、config/database.phpに書かれています。このファイルには、連想配列の形で、MySQLやPostgreSQLを始めとするさまざまなデータベースへの接続情報が書かれており、デフォルトでMySQLを採用するようになっています。このファイルに追記することで、複数のデータベースをアプリケーション内部で切り替える、といったことも可能となります。
一方、用意された単一のMySQLデータベースに接続するならば、このdatabase.phpを変更する必要はありません。デフォルトではこのdatabase.phpも、.envに記述された情報を読み込むように設定されているからです。
よって、通常はデータベース接続情報を.envファイルに記述します。.envファイルを開くと、あらかじめ表1記載の「DB_…」と記述された行が確認できます。これらの行がデータベース接続情報です。
設定名 | 内容 |
---|---|
DB_CONNECTION | 接続先データベースの種類 |
DB_HOST | 接続先ホストアドレス |
DB_PORT | 接続先ポート番号 |
DB_DATABASE | 接続先データベース名 |
DB_USERNAME | 接続先ユーザー名 |
DB_PASSWORD | 接続先パスワード |
DB_CONNECTIONについては、database.phpで設定された接続先情報を記述します。デフォルトでは、sqlite、mysql、pgsql(PostgreSQL用)、sqlsrv(SQLServer用)から選択できますし、database.phpに追記することで、選択肢を増やすことができます。また、上記設定名の他に、URI形式で接続情報を記述できるDATABASE_URLというのもあります。
.envファイルのこれらの設定値を変更することで、独自のデータベースに接続できるようになります。例えば、リスト1のような記述です。
〜省略〜 DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=fldb DB_USERNAME=flusr DB_PASSWORD=hogehoge 〜省略〜
これは、ローカル環境に用意したfldbデータベースに、flusrユーザーで、パスワードhogehogeで接続するための設定です。
[Note].envファイルはGit管理対象外
ここでデータベース接続情報を記述した.envファイルは、Gitの管理対象外ファイル(.gitignoreに記載されたファイル)となっています。というのも、このような設定情報はアプリケーションの実行環境ごとに異なるからです。例えば、開発環境と本番環境といった、別々の実行環境を、ソースコードが同じでも簡単に切り替えるために、.envファイルを管理対象から外しています。
これは裏を返せば、Gitから対象アプリケーションをクローンした場合、この.envファイルを手動で作成しなければまともに動作しないことを意味します。そのために、Laravelプロジェクトでは、プロジェクトフォルダー直下に.env.exampleというファイルが用意されています。これを複製し、内容を適切に書き換えた上で、次のコマンドを実行することで動作可能となります。
php artisan key:generate