我的评论系统如下所示。用户可以评论文章,图像和帖子。一切正常。但除此之外,我想添加一个用户可以评论网站本身的部分,比如一般评论。我想将它整合到现有的评论系统中。但自然地,我没有桌面或模型可以添加关系。什么是好的方式去?
表格如下:
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()
创建评论时,不要将其附加到任何实体,它将被视为全球通用评论。
请记住,您需要在迁移中手动添加commentable
和commentable_type
字段(而不是假设为$table->morphs('commentable')
),将其标记为可为空并将这些字段编入索引。