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

使用场景:

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

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

Blog模块不是您的。您的同事对此负责,并可以为其编写代码。所以你尽可能的不在Blog 中修改,以免背锅。(大项目场景)
laravel 不在模型中定义关联关系的解决方法(拒绝背锅)_第1张图片

通常的做法在User 和Blog 加入

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

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

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

composer require imanghafoori/eloquent-relativity

laravel 不在模型中定义关联关系的解决方法(拒绝背锅)_第2张图片
在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');

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

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

你可能感兴趣的:(laravel)