2017-02-21 57 views
0

我有一个类似下面的评论系统。用户可以评论文章,图片和帖子。一切正常。但除此之外,我想添加一个用户可以评论网站本身的部分,就像一般评论一样。我想将其与现有评论系统集成。但是,自然地,我没有可以添加关系的网站本身的表格或模型。什么是一个好的方法去?如何在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(); 
    } 
} 
+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')),它们标记为可为空和索引的字段。

+0

你是完全正确的。我绝对会使用它。但为什么“索引这些领域”呢?你是否说过(通用)加速表或其他原因? – Skeletor

+1

Laravel在调用'$ table-> morphs(...);'时自动索引变形字段,但如果要手动添加这些字段,则需要自行添加索引。如果你不这样做,你会在使用预加载时遇到性能问题(例如'Article :: with('comments') - > all()') – Mariusz