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 协议》,转载必须注明作者和本文链接
推荐文章: