【Laravel6.0】データベースへのアクセスから操作方法まで(マイグレーションなど)

Laravelでアプリを作り始める時に、データベースを用意したあと、次に何をしたらいいか、どうやってデータベースにアクセスしたらいいか、すぐ忘れるので、ここにメモしておきます。

はじめに

前提

・データベースの準備ができている。
(データベースの作成と.envファイルの設定など)
・Laravel6.0、Eloquent

データベース操作の流れ

routes → Controller → model → データベース
                     ↓
      Controller ← model ← データベース
        ↓
      Controller → views(Bladeテンプレート)

上記の図のように、「Controller」から「データベース」を操作する際、間に「model」を挟みます。

今回は、
・テーブルの作成
・モデルの作成
・コントローラーの作成
の順で書いていきます。

テーブルの作成

まず、マイグレーションファイルという、テーブルの仕様などが書かれたスクリプトファイルを用意し、それを実行することで、テーブルを作成します。

マイグレーションファイルの作成

Laravelでは、マイグレーションファイルの雛形ファイルを作るコマンドが用意されています。

$ php artisan make:migration 作成する名前

例えば、membersというテーブルを作りたい時は、

$ php artisan make:migration create_members_table

とすると、
「2020_01_31_150953_create_members_table.php」のように、先頭に作成日が入ったファイルが作成されます。
(database/migrations/以下にできます)

ファイル名のルール
・「create_{テーブル名}_table」のような形式にする。
・テーブル名は複数形にする。(あとで説明あります)

マイグレーションファイルの編集

できた雛形ファイルの中身は以下の通り。

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateMembersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
       Schema::create('members', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('members');
    }
}

例えば、以下のようにカラムを追加します。

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateMembersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('members', function (Blueprint $table) {
            $table->id();
            $table->string('name', 100);
            $table->string('email')->unique();
            $table->text('comment')->nullable();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('members');
    }
}

カラムタイプの指定の仕方については、結構たくさん種類があるので、詳しくは公式ページを参照してください。

マイグレーション実行

マイグレーションファイルができたら、以下のコマンドで実行。

$ php artisan migrate

これで、エラーがなければ、テーブルが作成されているはずです。

モデルの作成

次に、モデルファイルの作成をします。こちらも雛形作成コマンドが用意されています。

modelファイル作成

$ php artisan make:model 作成する名前

// 例えば
$ php artisan make:model Member

ファイル名のルール
・テーブル名の単数系にする。

例えば、「members」という名前のテーブルを操作するmodelファイル名は、「Member」という事になります。つまり、テーブル名は常に複数形で作成しておくのが良さそうです。

実行すると、「app」内に「Member.php」という雛形ファイルが作成されます。
中身は、以下の通り。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Member extends Model
{
    //
}

modelファイルの編集

とりあえずは、そのままでOK。
必要な場合だけ中身を書きます。

コントローラーの作成

続いて、コントローラーファイルも作成します。こちらも雛形を作成するコマンドがあります。

Controllerファイルの作成

$ php artisan make:controller 作成する名前

// 例えば、
$ php artisan make:controller MemberController

すると、以下のような内容のファイルが作成されます。
(app/Http/Controllersの中に作成されます)

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class MemberController extends Controller
{
    //
}

今回は、このControllerファイルの中にデータベース操作のスクリプトを書いてみます。

Memberモデルを使うために以下を追記します。

use App\Member;

データベースの操作

今回は、Eloquentを使った操作方法です。

データの取得

すべて取得

例えば、「members」テーブルから、すべてのデータを取得して、Viewsの「list.blade.php」に渡す場合。

public function index()
{
  $members = Member::all();
  return view('list', compact('members'));
}

主キーを指定して取得

$members = Member::find(主キー);

条件を指定して取得

$members = Member::where('カラム名',条件)->get();

// 例えば
$members = Member::where('email','taro@brainlog.jp')->get();

データの挿入

新規

例えば、「members」テーブルに、新しいレコードを挿入する場合。

$member = new Member();
$member->name = '太郎';
$member->email = 'taro@brainlog.jp';
$member->comment = 'こんにちは';
$member->save();

更新

更新先の主キーを指定して更新する場合。

$member = Member::findOrFail(主キー);
$member->comment = 'おはよう';
$member->save();

レコードの削除

レコードを削除する場合。

$member = Member::findOrFail(主キー);
$member->delete();

まとめ

以上、テーブル作成から操作まででした。
テーブルの操作については、他に様々な方法があります。また機会があったらまとめてみたいと思います。