如何在laravel中添加/集成一般网站评论到我现有的评论系统?

时间:2017-02-21 12:49:40

标签: laravel

我的评论系统如下所示。用户可以评论文章,图像和帖子。一切正常。但除此之外,我想添加一个用户可以评论网站本身的部分,比如一般评论。我想将它整合到现有的评论系统中。但自然地,我没有桌面或模型可以添加关系。什么是好的方式去?

表格如下:

articles
    id - integer
    title - string
    body - text

posts
    id - integer
    title - string
    body - text

images
    id - integer
    title - integer
    path - text

comments
    id - integer
    comment - text
    commentable - integer
    commentable_type - string

和模型类似于:

class Post extends Model
{
    public function comments()
    {
        return $this->morphMany(Comment::class, 'commentable');
    }
}

class Images extends Model
{
    public function comments()
    {
        return $this->morphMany(Comment::class, 'commentable');
    }
}

class Article extends Model
{
    public function comments()
    {
        return $this->morphMany(Comment::class, 'commentable');
    }
}

class Comment extends Model
{
    public function commentable()
    {
        return $this->morphTo();
    }
}

1 个答案:

答案 0 :(得分:1)

由于您只有一个网站,因此您可以将变形字段设置为可为空,并为Comment模型添加范围,该范围仅返回与您的网站相关的评论,如下所示:

public function scopeForWebsite($query) {
    return $query->where(function($query) {
        $query->whereNull('commentable')->whereNull('commentable_type');
    });
}

然后使用以下方式检索您的网站评论:

Comment::forWebsite()->get()

创建评论时,不要将其附加到任何实体,它将被视为全球通用评论。

请记住,您需要在迁移中手动添加commentablecommentable_type字段(而不是假设为$table->morphs('commentable')),将其标记为可为空并将这些字段编入索引。