データベースの使い方(マイグレーション編)

データベースとは

データベースとは、データを保持するための専用のアプリケーションです。データを効率的に保持し、新規作成、検索、更新、削除を効率よく行えます。データベースを使用することで様々な場面で必要なデータをすぐに取得、更新、削除が可能になります。データベースには様々な製品、様々なタイプがありますが、今回はMySQLというデータベースを使用します。

MySQLとは

MySQLはオープンソースのデータベースで無料で使用できることから世界中で広く使用されています。リレーショナルデータベースに分類され、データをリレーショナル(関係性)で保持、整理しています。

Laravelでデータベースを使用する

Laravelのインストール時に.envファイルでMySQLへのアクセスの設定は終わっているので、Laravelでデータベースの操作に必要なファイルなどを作成し、実行すれば、データベースを利用できます。まずは、データベースに登録するデーターのひな型を作成します。このファイルはマイグレーションファイルと呼ばれ以下のコマンドで作成します。

php artisan make:migration create_items_table

ここではitemsというテーブルを作成します。マイグレーションファイルには命名に規則があり、create_テーブル名(複数形)_tableという規則があります。テーブル名はその名称の複数形で記述され、後ほど説明するモデルの単数形とすると、モデルとテーブルをLaravelが自動で紐づけてくれます。コマンドを実行すると、database/migrationsに先頭にいくつかの数字が並んだファイルが作成されています。例えば1234_56_78_912345_create_items_table.phpとなっているはずです。このファイル名の数字はタイムスタンプを表しており、いつ作成されたかがわかるようになっています。このファイルを開くと以下のようなコードが記述されていると思います。

<?php

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

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

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

ここで、up関数内に記述されているSchema::create関数の第一引数がitemsとなっていることに注目してください。これは、テーブル名を表しています。現在、テーブルには、データベースが自動で割り振るidと、timestampが生成するように指定されています。また、down関数にはitemsテーブルを削除するように設定されています。これは、マイグレーションをやり直したりすることができるようにするものです。

今回新たにitemsテーブルを追加しますが、追加する前にテーブルの内容を決めておきましょう。以下のような内容にしたいと思います。

カラム名内容
nameアイテムの名前

ここでは、簡単にアイテムの名前を追加するだけにします。ここで重要なのはカラムの型をどうするかです。Laravelでは多数の型をサポートしていますが、ここでは、よく使用する型をここでは解説します。

メソッド説明
integer32ビット整数を格納します。
double倍精度浮動小数点を格納します。
char固定長文字列を格納します。
string可変長文字列を格納します。
デフォルトでは最大255文字までです。
text大量のテキストデータを格納します。
date日付を格納します。
年、月、日まで格納します。
dateTime日時を格納します。
年、月、日、時、分、秒までを格納します。
time時間を格納します。
時、分、秒までを格納します。

stringメソッドを使用して、itemsテーブルにnameカラムを追加します。以下のようにコードを書き換えます。

Schema::create('items', function (Blueprint $table) {
            $table->id();
            $table->string("name");
            $table->timestamps();
        });

第一引数にテーブル名を記述します。メソッドによっては第二引数も指定できます。上記のコードを保存後、以下のコマンドでテーブルをデータベースに作成します。

php artisan migrate

上記のコマンドを実行すると新たにitemsテーブルが作成されます。テーブルが作成されたことを確認するために、新しいターミナルを開いて以下のコマンドでMySQLにアクセスします。

docker compose exec mysql bash

MySQLのサーバーにアクセス出来たら、以下のコマンドでMySQLにログインします。

mysql -u laravel_user -p

パスワードの入力を求められるので、以下のパスワードを入力します。

laravel_pass

するとMySQLにアクセスできます。以下のコマンドでMySQL内のだーたベースを確認できます。

show databases;

MySQLの構文は大文字と小文字を区別しません。一般的に大文字が使用されるケースが多いですが、ここでは小文字を使用します。上記のコマンドを実行すると以下のように表示されるはずです。

+--------------------+
| Database           |
+--------------------+
| information_schema |
| laravel_db         |
+--------------------+
2 rows in set (0.00 sec)

information_schemaはMySQLのデータベースに関するメタデータを管理するデータベースです。laravel_dbはLaravelをインストールする際にcompose.ymlで作成したデータベースです。以下のコマンドでアクセスするデータベースを指定できます。ここでは、laravel_dbを指定しています。

use laravel_db;

さらに以下のコマンドで、選択したデータベースのテーブル一覧を取得できます。

show tables;

実行すると以下のように表示されます。

+-----------------------+
| Tables_in_laravel_db  |
+-----------------------+
| cache                 |
| cache_locks           |
| failed_jobs           |
| items                 |
| job_batches           |
| jobs                  |
| migrations            |
| password_reset_tokens |
| sessions              |
| users                 |
+-----------------------+
10 rows in set (0.00 sec)

複数のテーブルがありますが、ほとんどはLaravelが自動で追加するテーブルです。注目すべきは、itemsのテーブルがあることです。これは、マイグレーションで新たに追加したテーブルです。次は、このテーブルの定義されている方情報などを取得します。以下のコマンドで取得できます。

describe items;

上記のコマンドを実行すると以下のように表示されるはずです。

+------------+-----------------+------+-----+---------+----------------+
| Field      | Type            | Null | Key | Default | Extra          |
+------------+-----------------+------+-----+---------+----------------+
| id         | bigint unsigned | NO   | PRI | NULL    | auto_increment |
| name       | varchar(255)    | NO   |     | NULL    |                |
| created_at | timestamp       | YES  |     | NULL    |                |
| updated_at | timestamp       | YES  |     | NULL    |                |
+------------+-----------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

フィールド欄にnameがあり、タイプはvarcharと指定されているのがわかります。Laravelでstringで設定したものはMySQLでは、varchar型となります。

以上で、データベースへの登録は終了です。しかしながらこれだけではLaravelでデータをデータベースに書き込むことはできません。次回は、モデルについて解説し、MySQLにデータを保存する方法を解説します。

コメントを残す

CAPTCHA