Laravel5.1 搭建簡單的社區(八)--展現評論

增長評論功能須要建立新的表: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>
相關文章
相關標籤/搜索