本連載ではPHPフレームワークのひとつであるLaravelを紹介していきます。Laravelは、「Web職人のためのフレームワーク」というキャッチコピーのもと、ここ数年で人気がうなぎ上りのフレームワークです。連載を通して、その人気の秘密を味わっていただこうと思います。第8回である前回は、バリデーション機能を紹介しました。今回は、Laravelのデータベース処理を紹介します。
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
この記事は参考になりましたか?
- 人気のPHPフレームワークLaravelを習得しよう連載記事一覧
-
- Laravelの認証機能を理解しよう
- Laravelのデータベース処理を理解しよう
- Laravelにおけるバリデーションを理解しよう
- この記事の著者
-
WINGSプロジェクト 齊藤 新三(サイトウ シンゾウ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook <個人紹介>WINGSプロジェクト所属のテクニカルライター。Web系製作会社のシステム部門、SI会社を経てフリーランスとして独立。屋号はSarva(サルヴァ)。HAL大阪の非常勤講師を兼務。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
