オーダーメイドコース
icon
icon

Laravelでdatabase(データベース)を扱う方法【初心者向け】

初心者向けにLaravelでdatabaseを使う方法について解説しています。フレームワークからデータベースを操作します。Laravelでデータベースのデータを取得・表示・削除する書き方について説明しているので、覚えておきましょう。

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

Laravelでdatabaseを使う方法について解説します。

データを取得・表示・削除する書き方を実際に紹介しているので、参考にしてみてください。

 

そもそもPHPについてよく分からないという方は、PHPとは何なのか解説した記事を読むとさらに理解が深まります。

 

なお本記事は、TechAcademyのオンラインブートキャンプPHP/Laravel講座の内容をもとに紹介しています。

 

田島悠介

今回は、Laravelに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

Laravelでdatabaseを使う方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

databaseとは

databaseとはデータの塊です。開発者はデータベースマネジメントシステム(DBMS)と呼ばれるソフトウェアを用いてデータベースを操作します。

Laravelでは MySQLと呼ばれるDBMSを使用します。これは特にリレーショナルデータベースマネジメントシステム (RDBMS)と呼ばれ、テーブルと呼ばれる構造化された表の集まりを関連という概念を用いて操作できるように作成されているものです。

 

Laravelでデータベースに接続する書き方

Laravelでデータベースに接続するには、MySQLを別途用意した後、config/database.phpに必要情報を記述します(MySQLでなくてもよく、適切な接続情報さえ記述すればPostgreSQL、SQLiteなどを使用することもできます)。
config/database.phpは1つの配列でできています。この中身の主要なプロパティをネストした形で説明します。

  • default: アプリケーションがデフォルトで使用する接続名。接続名は後述のconnectionsに定義されたものが選択できます。
  • connections:接続の定義一覧です。
  • mysql(任意のconnection 名でよい): mysqlの接続情報を記述します。主要なものは以下になります。
    • driver:接続に使用するドライバーの名前です。ここではmysqlが入ります。
    • host:RDBMSが動作しているサーバーのhost名です。
    • port:RDBMSが動作しているサーバーのport名です。
    • database:アプリケーションが使用するデータベース名です。
    • username:データベースにアクセスするユーザー名です。
    • password:データベースにアクセスするユーザーのパスワードです。

適切に接続を定義すると、Laravelからデータベースを操作できるようになります。

 

[PR] PHPを学んで未経験からWebエンジニアを目指す方法とは

Laravelのマイグレーションファイルの書き方

データベースに接続できたら、マイグレーション機能を使用することができます (マイグレーション機能が使えるデータベースは構造を持つものに限ります、構造がなければマイグレーション機能を使用する意味もないですし)。マイグレーションはデータベースの変更履歴のようなものです。

マイグレーションファイル作成はphp artisan make:migration によって行います。このファイル内部でSchemaファサードを使って構造を変化する処理を記述していきます。Schemaファサードの代表的なメソッドとしては

  • Schema::create:第一引数に作成したいテーブルの名前、第二引数にクロージャーをとり、クロージャー内部に渡されるテーブルビルダーに対してカラムの追加や制約の追加を行いテーブルを作成します。
  • Schema::table:第一引数に変更したいテーブル名、第二引数はSchema::create同様クロージャーをとり、カラムの追加、削除、制約の変更などを行います。
  • Schema::dropIfExist: 削除したいテーブル名を引数で渡すと、テーブルが存在した時に削除してくれます。

他にも存在を確認するメソッドなどもありますが、基本的なものは上の3つになるでしょう。

 

実際にLaravelでデータを取得・表示・削除してみる

テーブルを作成して、Laravelの対話環境tinkerを用いて簡単な操作してみましょう。マイグレーションファイルを作成します。

php artisan make:migration create_test_table

マイグレーションファイルがdatabase/migrations/以下に作成されるので、中身のupメソッドのSchema::createのクロージャーを少し書き換えましょう、

...
        Schema::create('test', function (Blueprint $table) {
            $table->increments('id');
            $table->text('text');
            $table->timestamps();
        });
...

編集し、保存したらマイグレーションを実行しましょう、php artisan migrateを実行してください。Migrated …と表示されたらマイグレーションは成功です。対話環境を開いて作成したテーブルを操作してみましょう。php artisan tinkerを実行してください。

DBファサードを使って操作していきます。特定のテーブルをクエリするにはDB::table(テーブル名) でテーブルを指定し、メソッドチェーンで各句(clause)を記述しSQLを組み立てた後、getメソッドで実行し結果を取得します。getメソッドはselect句がない場合 select(‘*’) を内部的に追加してくれるので以外に乱暴な記述でも実行可能です。

DB::table('test')->get();

まだ何も入っていないので結果は空です。データを入れていきましょう、insertを使います。

DB::table('test')->insert(['text' => 'Insert'])

実行結果が真偽値として返ってきます。trueの場合、データがテーブルに追加されたのが先ほどのクエリで確認できます。

DB::table('test')->get();
=> IlluminateSupportCollection {#2848
     all: [
       {#2855
         +""id"": 1,
         +""text"": ""Insert"",
         +""created_at"": null,
         +""updated_at"": null,
       },
     ],
   }

このレコードを更新してみましょう。更新はupdateメソッドを使いますが、whereで更新対象を絞ってから使います。悲惨な結果を招きやすいので、手動で実行する場合、必ず一度 where(…)->get()で自分が更新したい対象だけが絞り込まれていることを確認してから更新してください。

DB::table('test')->where('id', 1)->update(['text' => 'Update'])

更新件数が返ってきます。今回は1レコードの更新だったので 1 でした。最後にデータを削除します。

DB::table('test')->where('id', 1)->delete()

削除件数が返ってきます。update同様1でした。

以上がDBの基本的な使い方になります。Laravelでレコードを操作する方法としてはEloquent ORMを使用する選択肢もあり、どちらかといえばそちらが一般的な気もします。timestampカラムも更新されません。

しかし、DB ファサードを使うことでSQLに近い構文でクエリやミューテーションを行えるため、デバッグや集計、特別な処理に於いて使う機会はあるかと思います。

この記事を監修してくれた方

鵜澤峻平(うさわしゅんぺい)

普現在はフリーランスのエンジニアをしていてプログラミング歴は5年目になります。普段はRails、Laravel、Node.js等を使って Web、モバイルアプリケーションを作成しています。開発実績としては、いくつかのWebサービス、コンシューマー向けモバイルアプリケーション、NPOサイトリニューアル、ロボット用プログラムなどがあります。

TechAcademyでメンターをはじめたのは、「プログラミングでやりたいことがある人を応援したい」、「講師と受講者が話し合って学び方を決めていく」に惹かれたからです。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

 

TechAcademyでは、初心者でもPHPやフレームワークのLaravelを使ってWebアプリケーション開発を習得できるオンラインブートキャンプPHP/Laravel講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。