【问题标题】:Laravel naming convention with similar Model names具有相似模型名称的 Laravel 命名约定
【发布时间】:2017-03-03 04:31:14
【问题描述】:

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

模型“任务”可以有许多“评论”,因此表格将是 - 任务 - cmets(带有 task_id 的外键)

但是,我有另一个模型“帖子”,它也需要一个“评论”,当然它与任务的评论是分开的

在这种情况下,一般情况下 - Task & TaskComment (模型) / tasks & task_cmets (数据库表) - Post & PostComment(模型)/posts & post_cmets(数据库表)

或其他一些约定?

【问题讨论】:

    标签: php laravel-5


    【解决方案1】:

    如果您使用多态关系,您甚至可以让评论拥有自己的 cmets(如回复系统)。

    在你想拥有 cmets 的模型中,你需要添加这样的方法:

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

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

    【讨论】:

    • 感谢您的回答 - 这很有意义,我能够让它工作!
    【解决方案2】:

    你想要的是多态性。

    按照https://laravel.com/docs/5.4/eloquent-relationships#polymorphic-relations 上的示例进行操作。这真的很接近你想要做的,所以希望它就足够了。如果你被卡住了,请告诉我,我会帮助你的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-19
      • 2012-09-07
      • 1970-01-01
      • 1970-01-01
      • 2010-09-28
      • 1970-01-01
      相关资源
      最近更新 更多