データベースを利用するためには、それなりの準備が必要です。ここではSQLiteデータベースを利用するための準備を整え、Laravelから利用するための設定などを行い、いつでもデータベースが使える状態にしましょう。
モデルとデータベース
MVC(Model-VIew-COntroller)の中でも、特に使いこなしが難しいのが「モデル(Model)」でしょう。モデルはデータの管理を行うところ、わかりやすく言えば「データベースの処理」を担当する箇所です。
データベースの利用というのは、様々なアプローチがあります。また利用にもアプリケーションによって千差万別です。
Laravelのアプローチ
Laravelでは、データベース処理のためにいくつかの機能を用意しています。以下に簡単に整理しておきましょう。
DBクラス(クエリビルダ)
最もシンプルなアプローチは「DB」クラスを利用する方法です。これはデータベースアクセスのための基本的な機能をまとめたクラスで、ここにあるメソッドを呼び出すことでアクセスできます。
このDBクラスではデータベースにアクセスするためのクエリを生成し、返信することができます。SQLを直接実行するのに近い感じですので、DBクラスを利用することで各段にデータベース利用が楽になった、というほどのインパクトはないかもしれませんが、手前にデータベースを利用するには最適な方法です。
また、「クエリビルダ」と呼ばれる機能が用意されており、これ利用するとメソッドを使ってデータベースにアクセスすることができます。SQLよりもPHPらしい処理ができるでしょう。
Eloquent(ORM)
これはORM(Object-Relation Mapping)と呼ばれる機能をLaravelに実装したものです。データベースのデータをシームレスに言語のオブジェクトに変換し、操作できるようにします。
Laravelに搭載されているEloquentというORMを使うと、DBクラスなどよりはるかにPHPのオブジェクトらしいアプローチでデータベースを利用できます。
モデルの作成方法
Laravelのモデルはarisanコマンドで簡単に作成することができます。
1 |
php artisan make:model User |
モデルの生成先を指定したい場合はモデル名の前にパスを指定します。
1 |
php artisan make:model Models\User |
モデルを使う
それでは実際にモデルを使ってみましょう。
データを用意して、モデルを作成し、コントローラでモデルを呼び出して用意したデータを出力することができるのか確認します。
まずはmigrationファイルを用意します。
1 |
php artisan make:migration create_user_tables |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateUserTables extends Migration { public function up() { // } public function down() { // } } |
作成されたmigrationファイルを以下のように編集します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateUserTables extends Migration { public function up() { $table->increments('id'); $table->string('name'); $table->timestamps(); } public function down() { Schema::drop('users'); } } |
続いて、初期データを用意するためにシーダーを作成します。
1 |
php artisan make:seed UserTableSeeder |
そして作成されたシーダーファイルを次のように編集します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php use Illuminate\Database\Seeder; class UserTableSeeder extends Seeder { public function run() { $this->db->table('users')->insert([ 'name' => 'default_user', ]); } } |
作成したシーダーを実行できるように下記のファイルを編集します。
1 2 3 4 5 6 7 8 9 10 11 12 |
app/database/seeds/DatabaseSeeder.php <?php use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { public function run() { $this->call(UserTableSeeder::class); } } |
マイグレーションとシーダーの用意ができましたので、マイグレーションとシーダーを実行してみましょう。