4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Laravelでテーブルと初期値を作成する

Posted at

#はじめに
Laravelのマイグレーションファイルとシーダーファイルを使って、テーブルとその初期値を作成します。

#準備
###データベースの作成
まず、データベースを作成します。
プロジェクトで使用する「データベース」「ユーザー」「パスワード」を作成しておきます。
各自の環境によるので、割愛します。

###データベース接続の設定
Laravelプロジェクト直下にある「.env」ファイルを以下のように修正します。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE="データベース名"
DB_USERNAME="ユーザー名"
DB_PASSWORD="ユーザーパスワード"

mysql以外を使用する場合は、DB_CONNECTION等も修正します。
準備は完了です。

#テーブルの作成
###マイグレーションファイルの作成
Larabelプロジェクトの直下に移動後、コンソールで以下のコマンドを実行します。
今回はテーブル名を"items"とします。

php artisan make:migration create_items_table

以下の表示が出れば成功です。

Created Migration: yyyy_MM_dd_HHmmss_create_items_table

(yyyy_MM_dd_HHmmssは作成時の日時が入ります。)

###マイグレーションファイルの修正
作成したマイグレーションファイルは、Laravelプロジェクト>database>migrations下に作られています。
初期状態で以下の内容が書かれています。
upはマイグレーションを実行する際に実行され、downはマイグレーションを元に戻す際に実行されます。

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

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

upの中に列の定義を記述します。
$table->"型名"("列名")の形です。

            $table->bigIncrements('id');
            $table->string('name'); // 追加
            $table->timestamps();

###マイグレーションの実行
Larabelプロジェクトの直下に移動後、コンソールで以下のコマンドを実行します。

php artisan migrate

以下の表示が出れば成功です。

Migrating: yyyy_MM_dd_HHmmss_create_items_table
Migrated:  yyyy_MM_dd_HHmmss_create_items_table

環境によっては、「SQLSTATE[42000]: Syntax error or access violation」が出ます。
いくつか方法があるようですが、私は以下の対策をしました。

Laravelプロジェクト>app>Providers>AppServiceProvider.phpファイルのboot()内に、以下の記述を追加します。

    public function boot()
    {
        Schema::defaultStringLength(191);
    }

#モデルの作成
Larabelプロジェクトの直下に移動後、コンソールで以下のコマンドを実行します。

php artisan make:model Item

以下の表示が出れば成功です。

Model created successfully.

#初期値の作成
###シーダーファイルの作成
Larabelプロジェクトの直下に移動後、コンソールで以下のコマンドを実行します。

php artisan make:seeder ItemsTableSeeder

以下の表示が出れば成功です。

Seeder created successfully.

###シーダーファイルの修正
作成したマイグレーションファイルは、Laravelプロジェクト>database>seeds下に作られています。
初期状態で以下の内容が書かれています。

class ItemsTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //
    }
}

runの中に初期値の作成を記述します。
流れは、
「先ほど作成したモデルをnewする→値を設定→save()で登録」
です。
複数件作りたい場合は、for文などで記述します。

        for($i = 1; $i <= 5; $i++)
        {
            $item = new Item();
            $item->name = '名前' . $i;
            $item->save();
        }

###シーダーの実行
Larabelプロジェクトの直下に移動後、コンソールで以下のコマンドを実行します。

php artisan db:seed --class=ItemsTableSeeder

以下の表示が出れば成功です。

Database seeding completed successfully.

確認すると、きちんと追加されていました。

+----+-------+---------------------+---------------------+
| id | name  | created_at          | updated_at          |
+----+-------+---------------------+---------------------+
|  1 | 名前1 | 2019-04-11 21:13:35 | 2019-04-11 21:13:35 |
|  2 | 名前2 | 2019-04-11 21:13:35 | 2019-04-11 21:13:35 |
|  3 | 名前3 | 2019-04-11 21:13:35 | 2019-04-11 21:13:35 |
|  4 | 名前4 | 2019-04-11 21:13:35 | 2019-04-11 21:13:35 |
|  5 | 名前5 | 2019-04-11 21:13:35 | 2019-04-11 21:13:35 |
+----+-------+---------------------+---------------------+
5 rows in set (0.00 sec)

#コマンドまとめ
マイグレーションファイル作成
※テーブル名は「小文字始まり、複数形」

php artisan make:migration create_"テーブル名"_table

マイグレーション実行

php artisan migrate

モデル作成
※モデル名は「大文字始まり、単数形」

php artisan make:model "モデル名"

シーダーファイル作成

php artisan make:seeder "モデル名の複数形"TableSeeder

シーダーの実行

php artisan db:seed --class="シーダー名"
4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?