Laravel5.1 搭建简单的社区(八)--展示评论

增加评论功能需要创建新的表:

php artisan make:migration create_comments_table --create=comments
php artisan make:model Comment                                    

修改迁移文件:

    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();
        });
    }

在模型中声明关系方法,易于调用:

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中:

    // 关联到comment
    public function comments()
    {
        return $this->hasMany(Comment::class);
    }

新增加factory方法:

$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中批量生成:

factory(‘App\Comment‘,50)->create();

现在,我们可以随意在一篇文章中展示评论,修改show.blade.php:

    <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>
时间: 2024-08-03 14:29:26

Laravel5.1 搭建简单的社区(八)--展示评论的相关文章

Laravel5.1 搭建简单的社区(四)--展示帖子页面

首先我们注册resource路由: Route::get('/', '[email protected]'); Route::resource('discussions', 'PostsController'); 在PostsController的show方法返回一个视图: public function show($id) { // 取到单条帖子 $discussion = Discussion::findOrFail($id); // 返回视图 return view('forum.show

Laravel5.1 搭建简单的社区(五)--用户登录

定义一条登录的路由: // 用户登录 Route::get('/user/login', '[email protected]'); 添加相应方法后返回视图: public function login() { return view('user.login'); } 创建login视图: @extends('app') @section('content') <div class="container"> <div class="row">

Laravel5.1 搭建简单的社区(十二)--Ajax更换头像

此篇记录如何使用ajax进行头像的更换,使用ajax需要引入一个jQuery的插件 jQuery form,在app.blade.php中引入: <link rel="stylesheet" href="/css/bootstrap.css"> {{--引入fontawesome--}} <link rel="stylesheet" href="/css/font-awesome.css"> <l

Laravel5.1 搭建简单的社区(六)--发表帖子

首先我们先登陆我们的用户,访问/discussions/create 路由,因为这条路由在resource声明了 所以我们直接在PostsController中的create方法中直接实现逻辑就好: public function create() { return view('forum.create'); } 相应的 创建create页面: @extends('app') @section('content') <div class="container"> <d

Laravel5.1 搭建简单的社区(六)--引入MarkDown

在github中搜索HyperDown,直接复制Parser.php的源代码,在App文件夹中创建一个新的目录 Markdown,在App/MarkDown中创建Parser.php,然后在顶部更改命名空间: namespace App\MarkDown; 到此就已经成功的引入Markdown了,现在我们创建一个Markdown类来方便我们使用: namespace App\MarkDown; class Markdown { protected $parser; /** * Markdown

Laravel5.1 搭建简单的社区(六)--修改文章

因为之前注册了resource路由 所以我们可以直接在PostsController的edit方法中实现逻辑: public function edit($id) { // 通过id取到文章模型 $discussion = Discussion::findOrFail($id); // 返回视图 return view('forum.edit', compact('discussion')); } 创建edit.blade.php (我们使用了form的模型绑定): @extends('app'

拿nodejs快速搭建简单Oauth认证和restful API server攻略

拿nodejs快速搭建简单Oauth认证和restful API server攻略:http://blog.csdn.net/zhaoweitco/article/details/21708955 最近一直在鼓捣这个东西,拿出来分享下一下经验吧,其实很简单,一点也不难. 首先需求是这样,给自己的网站要增加API服务,API分为两种,公共的和私有授权的,授权的使用Oauth方法认证身份,API格式均为JOSN和JSONP. 嗯,别的语言我也没怎么学过,首先是找合适的框架进行实现吧.本身网站使用的e

玩转Node.js(四)-搭建简单的聊天室

玩转Node.js(四)-搭建简单的聊天室 Nodejs好久没有跟进了,最近想用它搞一个聊天室,然后便偶遇了socket.io这个东东,说是可以用它来简单的实现实时双向的基于事件的通讯机制.我便看了一些个教程使用它来搭建一个超级简单的聊天室. 初始化项目 在电脑里新建一个文件夹,叫做“chatroom”,然后使用npm进行初始化: $ npm init 然后根据提示以及相关信息一步一步输入,当然也可以一路回车下去,之后会在项目里生成一个package.json文件,里面的信息如下: 1 $ ca

Django:快速搭建简单的Blog

一,创建项目 1, 为blog创建名为mysite的工程项目: django-admin.py startproject mysite 2, 项目结构如下: mysite ├── manage.py └── mysite ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py manage.py ----- Django项目里面的工具,通过它可以调用django shell和数据库等. settings.py ---- 包含了项目的默认设置