这是一个非常基本的问题,但试图围绕具有相似名称的模型/表的首选命名约定。
模型'Task'可以有很多'Comments',所以表格就是这样 - 任务 - 注释(使用task_id的外键)
但是,我还有另一个模型'Post',它还需要一个'Comments',当然它与任务的评论是分开的
在这种情况下,人们通常会这样做 - 任务& TaskComment(模型)/任务& task_comments(数据库表) - 邮政& PostComment(模特)/帖子& post_comments(数据库表)
或其他一些惯例?
答案 0 :(得分:1)
你想要的是多态性。
按照https://laravel.com/docs/5.4/eloquent-relationships#polymorphic-relations上的示例操作。它真的很接近你想要做的事情,所以希望它足够了。如果你遇到困难让我知道,我会帮助你
答案 1 :(得分:1)
如果您使用多态关系,您甚至可以使评论有自己的评论(如回复系统)。
在您想要评论的模型中,您需要添加如下方法:
public function comments() {
return $this->morphMany(Comment::class, 'commentable');
}
然后在您的评论模型中,您只需添加
public function commentable() {
return $this->morphTo();
}
请注意,Comment中的方法名称与传递给morpMany()函数的第二个参数匹配的重要性。
最后但并非最不重要的是,您变形的模型需要在其模式中包含特殊字段:
您必须将它们放在传统架构结构的末尾:
// Your comment dedicated schema
$table->integer('commentable_id');
$table->string('commentable_type');
我真的不知道它是否重要,但请注意字段前缀如何与我们变形的方法名称匹配。