データベースとは
データベースとは、データを保持するための専用のアプリケーションです。データを効率的に保持し、新規作成、検索、更新、削除を効率よく行えます。データベースを使用することで様々な場面で必要なデータをすぐに取得、更新、削除が可能になります。データベースには様々な製品、様々なタイプがありますが、今回は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では多数の型をサポートしていますが、ここでは、よく使用する型をここでは解説します。
メソッド | 説明 |
integer | 32ビット整数を格納します。 |
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にデータを保存する方法を解説します。