Laravel 不在模型中定义关联关系的解决方法(拒绝背锅)

使用场景:

比如有一个博客系统(User Blog)需要加入评论功能Comment

你在一个团队中,每个成员都在一个单独的模块上工作。

Blog模块不是您的。您的同事对此负责,并可以为其编写代码。所以你尽可能的不在Blog 中修改,以免背锅。(大项目场景)
在这里插入图片描述

通常的做法在User 和Blog 加入

public function comments() {
    return $this->hasMany(Comment::class); 
}

但是有时候编写代码的时候不想影响 User 和Blog 的模型类,

那有什么优雅的办法可以实现关联关系呢?

composer require imanghafoori/eloquent-relativity

在这里插入图片描述
在User 和 Blog 中use DynamicRelations

创建一个Provider

class CommentsServiceProvider 
{
    public function register () {

        User::has_many('comments', Comment::class);     // instead of defining method on the User class.
        Article::has_many('comments',  Comment::class);

        Comment::belongs_to('author', User::class);       // inverse of relations
        Comment::belongs_to('article',  Article::class);
    }

}

这样你就可以在你的业务逻辑使用

User::find(1)->comments;
or 
User::find(1)->comments()->count();

当然, 你也可以像在普通关联的用法一样,加入自定义的需求:

User::has_many('comments', Comment::class)->orderBy('id', 'asc');

聪明的你 觉得这种场景,你会用到吗?

和我做朋友?
原文:github.com/imanghafoori1/eloquent-...

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
38
粉丝
16
喜欢
144
收藏
134
排名:320
访问:3.0 万
私信
所有博文
社区赞助商