YuHo のブログ

Laravel, PHP, JavaScript

Laravel 5.6 でブログサイトを制作する2 #7 Seeder ファイルを書き足す

今回は Seeder ファイルを書き足して、Factory で製造する post モデルのインスタンスに user_id を、comment モデルのインスタンスに user_id, post_id を追加します。

posts テーブルに user_id カラムを追加する

今の Post モデルには user_id がないので、マイグレーションファイルを作成して、それを付け足します。

php artisan make:migration add_user_id_to_posts_table --table=posts
[blog/database/migrations/????_??_??_??????]

<?php

public function up()
{
    Schema::table('posts', function (Blueprint $table) {
        $table->integer('user_id');
    });
}

/**
     * Reverse the migrations.
     *
     * @return void
     */
public function down()
{
    Schema::table('posts', function (Blueprint $table) {
        $table->dropColumn('user_id');
    });
}

Seeder ファイルを編集する

Seeder ファイルを編集します。

PostsTableSeeder

Post モデル用の Seeder は user_id を書き込むように書き換えます。
User モデルと Post モデルの Relationship を使います。
全ての User モデルのインスタンスを取得して、各インスタンスに対して、記録を作ります。

[blog/database/seeds/PostsTableSeeder.php]

<?php

public function run()
{
    $users = App\User::all();

    foreach($users as $user) {
        $user->posts()->save(factory(App\Post::class)->make());
    }
}

CommentsTableSeeder

Comment モデル用の Seeder には user_id と post_id を書き込むように書き換えます。
user_id は直接書き込み、post_id は Comment モデルと Post モデルの関係を利用して書き込みます。

[blog/database/seeds/CommentsTableSeeder.php]

<?php

public function run()
{
    $posts = App\Post::all();
    $users = App\User::all();
    $users_count = $users->count();

    foreach($posts as $post) {
        $comment = factory(App\Comment::class)->make();

        $user = $users[rand(0, $users_count-1)];

        $comment->user_id = $user->id;

        $post->comments()->save($comment);
    }
}

Seeder ファイルを実行する

最後にマイグレートします。

composer dump-autoload
php artisan migrate:refresh --seed