CodeZine(コードジン)

特集ページ一覧

Laravelのデータベース処理を理解しよう

人気のPHPフレームワークLaravelを習得しよう 第9回

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2020/09/18 11:00

 本連載では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_…」と記述された行が確認できます。これらの行がデータベース接続情報です。

表1:.envのデータベース接続情報
設定名 内容
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のような記述です。

[リスト1].env
〜省略〜
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

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • WINGSプロジェクト 齊藤 新三(サイトウ シンゾウ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きた...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

バックナンバー

連載:人気のPHPフレームワークLaravelを習得しよう

もっと読む

All contents copyright © 2005-2020 Shoeisha Co., Ltd. All rights reserved. ver.1.5