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 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

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