【PHP/Laravel】Laravel テーブル作成(Migration)とテーブル操作(Model)、ダミーデータ投入(Seeder・Factory)の実装方法

PHP / Laravel

Laravelテーブル作成・操作ダミーデータの設定・登録 したいんだけど、どうすれば良いのかな?

今回は、Laravelデータベースのテーブル構造をコードで管理 する Migrationデータベースのテーブルを操作 する Model開発・テスト用のダミーデータを簡単に登録 できる SeederFactory の実装方法について、ご紹介します。

Laravel環境構築がまだの場合 は、下記より Laravel環境構築 を行なってください。

Laravel テーブル作成(Migration)とテーブル操作(Model)、ダミーデータ投入(Seeder・Factory)の実装手順

Laravel でテーブル作成(Migration)とテーブル操作(Modelダミーデータ投入(SeederFactory)を実装する方法 は、以下の通りです。

  1. Migrationでテーブルの作成
    データベースのテーブル構造(カラムや型など)をコードで定義し、テーブルを作成します
  2. Modelの作成
    作成したテーブルをLaravelのアプリケーションから操作するためのモデルを作成します
  3. Factoryでダミーデータの定義
    Faker を利用して、テストや開発用のダミーデータの内容を定義します
  4. Seederでデータの登録
    Factory定義したダミーデータを使って、データベースにダミーデータを登録します

Migration でテーブルの作成

今回は例として、投稿テーブル(posts)ユーザー(user_id)とのリレーション(紐付け) を持たせるように作成します

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

最初に、下記の コマンドを実行 して、テーブル(例:posts)を作成するためのマイグレーションファイルを作成 します

マイグレーション(Migration)ファイルにテーブルカラム・構造を定義

Migration は、データベースのテーブル構造をコードで管理するための仕組み で、作成されたマイグレーションファイルを編集して、テーブルのカラムや構造を定義 していきます

補足①: usersテーブル(user_id)とのリレーション

この記述は、posts テーブルの user_id カラム(posts.user_id)を作成 し、users テーブルの id カラム(users.id)を外部キーとして参照する という意味になります。
これにより、どのユーザーが投稿した記事なのかをデータベース上で紐づけることができます。

補足②: cascadeOnDelete()

cascadeOnDelete() は、外部キーで関連付けられているデータを自動で削除する設定 です
これにより、ユーザーが削除された際に、そのユーザーに紐づく投稿データも自動で削除されます。
外部キー制約を設定しておく ことで、データの整合性を保つ ことができます。

Migration の実行(テーブル作成)

作成したマイグレーションを実行する ことで、データベースにテーブルが作成されます
下記の コマンドを実行 すると、DBpostsテーブル が作成されます。
Migrationを実行する と、Laravel では database/migrations にある未実行のマイグレーションを順番に実行します

テーブル構造

カラム名説明
idbigint投稿ID(主キー)
user_idbigintusersテーブルのidを参照する外部キー
titlevarchar投稿タイトル
contenttext投稿本文
created_attimestamp作成日時
updated_attimestamp更新日時

Model の作成

Laravel では、データベースのテーブルを操作する ために Model を作成します。
今回は例として、posts テーブルを操作するための Postモデル を作成します。

Model ファイルの作成

下記の コマンドを実行 して、 テーブル(例:posts)を操作するモデルファイル(Post)を作成します。

実行すると、「app/Models/Post.php」のファイルが作成されます

Post モデルの編集

作成された Post.php を編集して、操作可能なカラムやリレーションを設定 します

各設定の説明

  1. $fillable
    • user_id, title, content など、配列に指定したカラムだけが保存・更新できる ようになるため、モデルを通して createupdate を使ってまとめて値を設定・更新できます。
  2. HasFactory
    • Factory(ダミーデータ生成)を使うために必要な設定です。
  3. belongsTo
    • User モデルPost モデル紐づける場合にリレーションを定義 することで、
      $post->user投稿のユーザー情報を取得する ことができます。
    • users テーブルposts.user_id のリレーションモデル側でも表現する ことができます。

User モデルの編集(リレーションの追加)

users テーブルに対応する User モデル は、Laravelのプロジェクト作成時に最初から用意されているため新しく作成する必要はありません。

ただし、ユーザーに紐づく投稿データを取得できるようにする ため、posts テーブルの posts.user_id と users.id を紐づけるリレーションUser モデルに追加します。

  • hasMany
    User モデルPost モデル紐づける場合にリレーションを定義する ことで、
    $user->postsユーザーに紐づく投稿データを取得することができます。
    users テーブルusers.idposts.user_id のリレーションモデル側でも表現する ことができます。

User モデル 側では hasMany(1対多)Post モデル 側では belongsTo(多対1)リレーションを定義 します。

Factory でダミーデータの定義

Laravel では、開発やテスト用にダミーデータを簡単に作成する ために Factory を使用します。
今回は例として、posts テーブル用の PostFactory を作成します。

Factory の作成コマンド

下記の コマンドを実行 して、PostFactory を作成します

実行すると、「database/factories/PostFactory.php」の ファイルが作成 されます

PostFactory の編集

作成された PostFactory を編集して、ダミーデータの内容を定義します。
PostFactory を実行する と、「user_id => User::factory() 」により、作成される投稿は自動的に posts.user_id に紐付け られます

補足: users テーブルの UserFactory

users テーブル users.idposts テーブル posts.user_id に紐づけるため UserFactory を使用していますが、Laravelではプロジェクト作成時に UserFactory は最初から用意されている ため、新しく作成する必要はありません

Seeder でデータの登録

Laravel では、Factory で定義したダミーデータをデータベースに登録する ために Seeder を使用します。
今回は例として、posts テーブルにダミーデータを登録する方法 を紹介します。

Seeder の作成コマンド

下記の コマンドを実行 して、PostSeeder を作成します

実行すると、「database/seeders/PostSeeder.php」の ファイルが作成 されます

PostSeeder の編集

作成された PostSeeder.php を編集して、PostFactory を使って ダミーデータを登録 します
※ 例として、users テーブルに100件posts テーブルに、1000件ダミーデータ を登録

Seeder の実行

作成した Seeder を実行 して、データベースにダミーデータを登録 します。

users テーブル

実行後の users テーブルに 100件のダミーデータ が挿入されている

posts テーブル

実行後の posts テーブルに、1000件のダミーデータ が挿入されている

処理の実行イメージ

まとめ

今回は、Laravelテーブル作成(Migrationテーブル操作(Modelダミーデータ投入(SeederFactory を行う方法について紹介しましたが、いかがでしたでしょうか?

Laravel では、データベースのテーブル構造(カラムや型など)を定義してテーブルを作成 する Migration や、作成したテーブルを Laravel アプリケーションから操作する ための Model を作成 します。
また、Fakerを利用してテストや開発用のダミーデータを生成する内容を定義する Factory や、その Factory を利用してデータベースにダミーデータを登録する Seeder を使用する ことができます。

SeederFactory を活用する ことで、開発環境やテスト環境でも簡単にダミーデータを作成できる ようになります。
まずは基本的な使い方をしっかり押さえ、Laravel の知識や理解をより深めていきましょう。

公式サイト

Laravel 12 マイグレーション

12.x マイグレーション Laravel

Laravel 12 Eloquentの準備(モデル)

12.x Eloquentの準備 Laravel

Laravel 12 Eloquent:ファクトリ

12.x Eloquent:ファクトリ Laravel

Laravel 12 データベース:シーディング

12.x データベース:シーディング Laravel
tachu × tachu

Laravel / React フルスタックエンジニア

Webエンジニア歴15年、フリーランス歴8年で、PHP / Laravel を中心に、
React.js / Vue.js を用いたフルスタックでのWeb開発をしています。

技術記事は Laravel / React / Web開発 を中心に書いています。

Webサービスの開発、既存システム改善、機能追加、技術相談、小規模な開発など、お気軽にご相談ください。

PHP / Laravel
シェアする

コメント

タイトルとURLをコピーしました