今回はPHPのフレームワークのLaravelでデータベースと連携したCRUDのAPIを作成してみたいと思います。CRUDというのは「Created(作成)」「Read(読み込み)」「Update(更新)」「Delete(削除)」というデータベースにおける基本的な操作をまとめた呼び方になります。
ここではLaravelで作成したAPIでデータベースを操作し、データを作成するまでの流れをまとめていきたいと思います。今回はデータベースに「SQLite」と呼ばれるものを使っています。SQLiteはファイル型のデータベースで、MySQLのようにサーバーが不要で単一のファイルを作成するだけで使うことができるので簡単に用意することができます。それでは早速進めていきましょう。
まずは、SQLiteのDBファイル作成を下記のコマンドで作成します。場所はLaravelのプロジェクトの中の「database」フォルダ内に作成します。
$ cd [PROJECT_NAME] database $ touch database.sqlite
SQLiteファイルが作成できたら、LaravelのDB接続設定を行います。プロジェクト直下にある「.env」ファイルを下記のように編集します。SQLiteを使う場合にはとてもシンプルな設定になります。
【.env】※一部抜粋
#DB_CONNECTION=mysql DB_CONNECTION=sqlite #DB_HOST=127.0.0.1 #DB_PORT=3306 #DB_DATABASE=homestead #DB_USERNAME=homestead #DB_PASSWORD=secret
DBの接続設定が終わると、DBのテーブルを生成するためのマイグレーションファイル作成します。下記コマンドでマイグレーションファイル名を指定し実行すると作成されます。
$ php artisan make:migration [FILE_NAME]
今回は、APIのサンプルとして簡単な記事投稿を想定したものを例として作成しますので名前をposts_tableにしました。
$ php artisan make:migration posts_table
database/migrations配下にマイグレーションファイルが作成されます。中身を確認すると下記のようになっており、マイグレーションのクラスにはデータベースを作成するup()という関数とデータベースを削除するdown()の関数が記述されています。もちろんデフォルトでは関数内は空になっています。
【database/migrations/yyyy_mm_dd_******_posts_table.php】※一部抜粋
use IlluminateSupportFacadesSchema; use IlluminateDatabaseSchemaBlueprint; use IlluminateDatabaseMigrationsMigration; class PostsTable extends Migration { public function up() { } public function down() { } }
続いて作成したマイグレーションファイルにデータベースのスキーマを定義していきます。データベース作成には「create関数」を使い、第一引数に対象のデータベース名を指定します。そして関数内には、必要なカラム名をテータ型と合わせて指定します。ちなみにtimestamps()を使うと、created_atとupdated_atのカラムが自動的に生成されます。また、データベース削除の定義も記述しておきます。
public function up() { Schema::create('posts', function (Blueprint $table) { $table->increments('id'); $table->string('title'); $table->string('content'); $table->timestamps(); }); } public function down(){ Schema::dropIfExists('posts'); }
これで下記コマンドでマイグレーションを実行すると、データベースにテーブルとカラムが作成されます。対象のマイグレーションファイルのステータスが表示されればOKです。
$ php artisan migrate Migrating: yyyy_mm_dd_******_posts_table Migrated: yyyy_mm_dd_******_posts_table
実際にデータベースの中身を確認すると、テーブルとカラムが指定した通りに作成されているのが確認できます。
また、すでに作成したマイグレーションファイルを変更した時など、マイグレーションを更新したい時は下記のコマンドを実行します。
$ php artisan migrate:fresh
続いてデータベースと連携させるModelを「Eloquent」と呼ばれる機能で作成していきます。app配下にModel用のファイルを作成し、下記のようにModelをクラスとして定義していきます。Modelのクラスで対象となるテーブル名を指定します。
【app/Post.php】
namespace App; use IlluminateDatabaseEloquentModel; class Post extends Model { // 対象のテーブル名を指定 protected $table = "posts"; }
続いて、Seederという機能で作成したデータベースにテストデータを流し込んでいきます。database/seeds配下にある「DatabaseSeeder.php」というファイルに下記のようにデータの内容を直接記述していきます。
【database/seeds/DatabaseSeeder.php】※一部抜粋
use IlluminateDatabaseSeeder; class DatabaseSeeder extends Seeder { public function run() { AppPost::create([ "title" => "テスト投稿タイトル1", "content" => "テスト投稿タイトル1の記事本文です。" ]); AppPost::create([ "title" => "テスト投稿タイトル2", "content" => "テスト投稿タイトル2の記事本文です。" ]); // $this->call(UsersTableSeeder::class); } }
そして下記コマンドを叩くと、データベースに指定した内容のテストデータが入ります。
$ php artisan db:seed Database seeding completed successfully.
実際にデータベースの中身を確認すると、確かにデータがあるのがわかります。
これでデータベースとの連携ができる準備が整いました。今回は、Laravelを使ってデータベースと連携したAPIを作成するをテーマに環境構築についてまとめています。次回記事「Laravelでデータベースと連携したCRUDのAPIを作成してみる(API実装)」は実際にデータベース内にデータを登録したり、削除するAPIを作成していきたいと思います。