增長評論功能須要建立新的表:php
php artisan make:migration create_comments_table --create=comments php artisan make:model Comment
修改遷移文件:dom
public function up() { Schema::create('comments', function (Blueprint $table) { $table->increments('id'); // 評論段落 $table->text('body'); // user_id 屬於哪一個用戶 $table->integer('user_id')->unsigned(); // discussion_id 屬於哪篇文章 $table->integer('discussion_id')->unsigned(); // 聲明user_id外鍵 $table->foreign('user_id') ->references('id') ->on('users') ->onDelete('cascade'); // 聲明discussion_id外鍵 $table->foreign('discussion_id') ->references('id') ->on('discussions') ->onDelete('cascade'); $table->timestamps(); }); }
在模型中聲明關係方法,易於調用:post
class Comment extends Model { protected $fillable = ['body', 'user_id', 'discussion_id']; // 關聯到discussion public function discussion() { return $this->belongsTo(Discussion::class); } // 關聯到user public function user() { return $this->belongsTo(User::class); } }
class Discussion extends Model { protected $fillable = ['title', 'body', 'user_id', 'last_user_id']; // 關聯到User public function user() { return $this->belongsTo(User::class); } // 關聯到comment public function comments() { return $this->hasMany(Comment::class); } }
在user中:this
// 關聯到comment public function comments() { return $this->hasMany(Comment::class); }
新增長factory方法:spa
$factory->define(App\Comment::class, function ($faker) { $user_ids = \App\User::lists('id')->toArray(); $discussion_ids = \App\Discussion::lists('id')->toArray(); return [ 'body' => $faker->paragraph, 'user_id' => $faker->randomElement($user_ids), 'discussion_id' => $faker->randomElement($discussion_ids), ]; });
在tinker中批量生成:code
factory('App\Comment',50)->create();
如今,咱們能夠隨意在一篇文章中展現評論,修改show.blade.php:blog
<div class="container"> <div class="row"> <div class="col-md-9"> <div class="blog-post"> {!! $text !!} </div> <hr /> @foreach($discussion->comments as $comment) <div class="media"> <div class="media-left"> <a href="#"> <img class="media-object img-circle" src="{{ $comment->user->avatar }}" alt="64x64" style="width: 64px; height: 64px;"> </a> </div> <div class="media-body"> <h4 class="media-heading">{{ $comment->user->name }}</h4> {{ $comment->body }} </div> </div> @endforeach </div> </div> </div>