使用場景:
比如有一個部落格系統(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 協議》,轉載必須註明作者和本文連結