はじめに

Cloud9を使ってLaravel5.4で開発、第5回です。

以前の記事はこちら
Cloud9を使ってLaravel5.4で開発【第1回】
Cloud9を使ってLaravel5.4で開発【第2回】
Cloud9を使ってLaravel5.4で開発【第3回】

Cloud9を使ってLaravel5.4で開発【第4回】
 

前回まででユーザ一覧画面の作成が完了しました。
  
今回からは掲示板を作成していきます。
 
ユーザ一覧の方でやった内容と一部重複している部分もあったりするので、多少端折ったりしています。
 

3.掲示板部分を作成

 

3-1.DBやテーブルの準備

3つのテーブルを作成

1.ポストテーブル

$ php artisan make:migration create_posts_table --create=posts

2.カテゴリーテーブル

$ php artisan make:migration create_categories_table --create=categories

3.コメントテーブル

$ php artisan make:migration create_comments_table --create=comments

※Laravelの規約に従うために、データベース名は必ず複数形に。
 
上記3つのコマンドで、テーブルを作るための「マイグレーションファイル」がそれぞれ作成される。
 

マイグレーションファイルを変更

// app/database/migrations/yyyy_mm_dd_000000_create_posts_table.php


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

class CreatePostsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->string('cat_id'); // ポストテーブルとカテゴリーテーブルの紐付けに利用
            $table->string('user_id'); // ポストテーブルとユーザーテーブルの紐付に利用
            $table->text('content');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('posts');
    }
}
// app/database/migrations/yyyy_mm_dd_000000_create_categories_table.php


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

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

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('categories');
    }
}
// app/database/migrations/yyyy_mm_dd_000000_create_comments_table.php


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

class CreateCommentsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('comments', function (Blueprint $table) {
            $table->increments('id');
            $table->unsignedInteger('post_id'); // ポストテーブルとコメントテーブルの紐付けに利用
            $table->string('user_id'); // コメントテーブルとユーザーテーブルの紐付に利用
            $table->text('comment');
            $table->timestamps();
        });
    }

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

以下のコマンドを実行してテーブルを実際に作成する。

$ php artisan migrate

これで

  • ポストテーブル
  • カテゴリーテーブル
  • コメントテーブル

がそれぞれできた。
 

DBにダミーデータを送信する

Seederの生成

$ php artisan make:seeder PostCommentSeeder

できたものを編集

app/database/seeds/PostCommentSeeder.php


    use Illuminate\Database\Seeder;
    use Illuminate\Database\Eloquent\Model;
    use App\Category;
    use App\Comment;
    use App\Post;

    class PostCommentSeeder extends Seeder
    {
        /**
         * Run the database seeds.
         *
         * @return void
         */
        public function run()
        {
            Post::truncate();
            Category::truncate();
            Comment::truncate();

            $content = 'この文章はダミーです。文字の大きさ・量・字間・行間等を確認するためにいれています。この文章はダミーです。文字の大きさ・量・字間・行間等を確認するためにいれています。この文章はダミーです。文字の大きさ���量・字間・行間等を確認するためにいれています。';

            $commentdammy = 'コメントダミーです。ダミーコメントだよ。';

            for ( $i = 1 ; $i <= 10 ; $i++ ) {
                $post = new Post;
                $post->title = sprintf('%s 番目の投稿', $i);
                $post->user_id = mt_rand(1, 25);
                $post->content = $content;
                $post->cat_id = mt_rand(1, 4);
                $post->save();

                $maxComments = mt_rand(3, 15);
                for ( $j=0 ; $j <= $maxComments; $j++ ) {
                    $comment = new Comment;
                    $comment->user_id = mt_rand(1, 25);
                    $comment->comment = $commentdammy;

                    // モデル(Post.php)のCommentsメソッドを読み込み、post_idにデータを保存する
                    $post->comments()->save($comment);
                }
            }

            // カテゴリーを追加する
            $cat1 = new Category;
            $cat1->name = "電化製品";
            $cat1->save();

            $cat2 = new Category;
            $cat2->name = "食品";
            $cat2->save();

            $cat3 = new Category;
            $cat3->name = "衣類";
            $cat3->save();

            $cat4 = new Category;
            $cat4->name = "書籍";
        }
    }

実行する

$ php artisan db:seed --class=PostCommentSeeder

これでテストデータがDBに保存された。
 

3-2.モデルのリレーションを設定

Artisanコマンドでモデルを作成

Postモデル作成

$ php artisan make:model Post

編集する。

app/Post.php


  <?php

  namespace App;

  use Illuminate\Database\Eloquent\Model;

  class Post extends Model
  {
      public function User()
      {
          // 投稿は、一人のユーザーに属する
          return $this->belongsTo('App\User');
      }

      public function Comments()
      {
          // 投稿はたくさんのコメントを持つ
          return $this->hasMany('App\Comment');
      }

      public function Category()
      {
          // 投稿は1つのカテゴリーに属する
          return $this->belongsTo('App\Category', 'cat_id');
      }
  }

Categoryモデルの作成

$ php artisan make:model Category

これはそのままで良い

app/Category.php


  <?php

  namespace App;

  use Illuminate\Database\Eloquent\Model;

  class Category extends Model
  {
      //
  }

Commentモデルの作成

$ php artisan make:model Comment

編集する。

app/Comment.php


  <?php

  namespace App;

  use Illuminate\Database\Eloquent\Model;

  class Comment extends Model
  {
      public function User()
      {
          // コメントは一人のユーザーに属する
            return $this->belongsTo('App\User');
      }
  }

 
今回はとりあえずここまでです。
 
あと3回くらいで終わる予定。
 
ではまた次回。

Shere
  • はてなブログ
  • Twitter
  • Facebook
Cloud9を使ってLaravel5.4で開発【第5回】

Writer

  • Name

  • Position

    自然を愛する現代っ子

  • Profile

    文章を書くのは苦手です。小学校の読書感想文は毎年「五体不満足」でした。毎年同じのを出してました。そのくらい苦手です。でもブログ書きます。読んで下さい。