具有类似模型名称的Laravel命名约定

时间:2017-03-03 04:31:15

标签: php laravel-5

这是一个非常基本的问题,但试图围绕具有相似名称的模型/表的首选命名约定。

模型'Task'可以有很多'Comments',所以表格就是这样 - 任务 - 注释(使用task_id的外键)

但是,我还有另一个模型'Post',它还需要一个'Comments',当然它与任务的评论是分开的

在这种情况下,人们通常会这样做 - 任务& TaskComment(模型)/任务& task_comments(数据库表) - 邮政& PostComment(模特)/帖子& post_comments(数据库表)

或其他一些惯例?

2 个答案:

答案 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');

我真的不知道它是否重要,但请注意字段前缀如何与我们变形的方法名称匹配。