`

两对象同时映射一对一和一对多

    博客分类:
  • RUBY
阅读更多
class Kpi::Team < ApplicationRecord
  has_many :crm_teams
  has_many :business_managers, through: :crm_teams, source: :business_manager
  has_many :account_managers, through: :crm_teams, source: :account_manager
  has_many :purchaser_managers, through: :crm_teams, source: :purchaser_manager
  has_many :customer_managers, through: :crm_teams, source: :customer_manager

  belongs_to :business_manager,  class_name: :Manager, foreign_key: :business_manager_id
  belongs_to :account_manager,   class_name: :Manager, foreign_key: :account_manager_id
  belongs_to :purchaser_manager, class_name: :Manager, foreign_key: :purchaser_manager_id
  belongs_to :customer_manager,  class_name: :Manager, foreign_key: :customer_manager_id

  after_save :change_managers

  def change_managers
    if self.saved_change_to_business_manager_id? 
      Kpi::CrmTeam.create(team_id:self.id,manager_type:"BusinessManager",manager_id:self.business_manager_id)
      self.business_manager.update(team_id:[self.id])
    end 
    if self.saved_change_to_account_manager_id?  
      Kpi::CrmTeam.create(team_id:self.id,manager_type:"AccountManager",manager_id:self.account_manager_id) 
      self.account_manager.update(team_id:[self.id])
    end
    if self.saved_change_to_purchaser_manager_id? 
      Kpi::CrmTeam.create(team_id:self.id,manager_type:"PurchaserManager",manager_id:self.purchaser_manager_id) 
      self.purchaser_manager.update(team_id:(self.purchaser_manager.team_id+[self.id]).uniq)
    end
    if self.saved_change_to_customer_manager_id? 
      Kpi::CrmTeam.create(team_id:self.id,manager_type:"CustomerManager",manager_id:self.customer_manager_id) 
      self.customer_manager.update(team_id:(self.customer_manager.team_id+[self.id]).uniq)
    end
  end

end


—————————————————————


class Kpi::CrmTeam < ApplicationRecord
  # 小组角色多肽
  # 记录历史组员
  belongs_to :team, class_name: 'Kpi::Team', optional: true
  belongs_to :manager
  belongs_to :business_manager, foreign_key: :manager_id, optional: true
  belongs_to :account_manager, foreign_key: :manager_id, optional: true
  belongs_to :purchaser_manager, foreign_key: :manager_id, optional: true
  belongs_to :customer_manager, foreign_key: :manager_id, optional: true
end
0
0
分享到:
评论

相关推荐

    ibatis 一对多 多对多完整映射

    本文将深入探讨如何在iBATIS中实现一对多和多对多的关系映射,并提供相关的源码分析和工具使用技巧。 **一对多关系映射** 在数据库设计中,一对多关系是指一个父记录可以与多个子记录关联,例如,一个用户可以有多...

    hibernate关联映射详解SSH 多对多,一对多关系对象映射

    本篇文章将深入探讨Hibernate中的一对多和多对多关系映射。 首先,让我们理解一对多关联映射。在数据库中,一对多关系意味着一个表中的记录可以与另一个表中的多个记录相关联。在Hibernate中,这可以通过在实体类中...

    JPA一对一,一对多,多对多关系映射

    Java Persistence API(JPA)是Java...理解并熟练掌握一对一、一对多和多对多关系映射对于使用JPA进行数据库操作至关重要。在实际开发中,根据业务需求选择合适的关系映射方式,可以极大地提高开发效率和代码可维护性。

    hibernate核心,一对多,多对多映射讲解,看了就完全搞明白了

    在映射文件中,我们为`Qx`和`Jd`类分别定义了多对一和一对多的映射。 通过学习和实践这些关联映射,我们可以更有效地使用Hibernate来管理Java应用程序中的数据库交互,提高开发效率和代码可维护性。

    ibatis 一对多关系映射

    这样,当我们调用`SqlSession`的`selectList`方法执行这个查询时,Ibatis会自动将返回的多条记录按照一对多的关系映射成`User`对象,每个`User`对象都有一个包含所有关联订单的`orderList`。 此外,还可以通过使用`...

    Hibernate一对多,多对一映射

    本主题将深入探讨Hibernate中的一对多和多对一映射关系,这两种关系在实际的业务场景中非常常见。 首先,我们来理解一下一对多映射(One-to-Many Mapping)。在数据库设计中,一对多关系意味着一个父记录可以与多...

    MyBatis框架的学习(五)——一对一关联映射和一对多关联映射

    在本篇关于MyBatis框架的学习中,我们将深入探讨一对一关联映射和一对多关联映射的概念、配置以及在实际开发中的应用。MyBatis是一个优秀的持久层框架,它允许开发者将SQL语句直接写在XML配置文件或者注解中,从而...

    Hibernate对象关系映射

    Hibernate对象关系映射一对多 很基础等文档

    MyBatis高级映射(一对多查询)

    总之,MyBatis的一对多映射功能为处理数据库中的一对多关联提供了便利,通过合理配置和优化,可以在保持代码简洁的同时,提高查询效率和数据处理能力。在设计和实现业务逻辑时,充分理解并利用这些特性,能够提升...

    一对多映射(双向映射)源码

    在Java或其他编程语言中,一对多映射(也称为多对一映射)和双向映射是两个重要的概念,它们在设计模式、数据库关系映射以及数据结构实现等方面有广泛应用。 一对多映射是指一个键可以对应多个值,而每个值只能对应...

    Springboot中mybatis表关联映射关系(一对一)

    在 Springboot 中,MyBatis 提供了强大的表关联映射关系机制,可以实现一对一、多对一、多对多等各种关联关系。在本文中,我们将详细介绍 Springboot 中 MyBatis 表关联映射关系的实现机制,特别是针对一对一关联...

    Hibernate双向一对一关联映射(注解版)

    本主题聚焦于“Hibernate双向一对一关联映射”的注解实现,这是一种高级的数据库设计模式,用于处理两个实体之间一对一的关系。 在Hibernate中,一对一关联映射分为单向和双向。单向一对一映射通常涉及一个实体持有...

    一对一映射一对一映射

    一对一映射是数据库设计中的一个重要概念,特别是在关系型数据库中,它用于描述两个表之间的一种特殊关系,即每个表中的记录最多只能与另一个表中的一条记录相关联。这种关系非常紧密,通常出现在一个实体的信息被...

    对象关系映射模型

    4. **关系映射**:支持一对一、一对多、多对多等各种复杂的关系映射。 5. **事件监听器**:提供事件钩子,可在对象状态改变时触发,增强了框架的灵活性。 6. **事务管理**:内置事务处理能力,简化了数据库操作中的...

    实现Mybatis框架中一对多关联映射的查询操作。

    在处理复杂的数据库关联关系时,比如一对一、一对多、多对一、多对多等,Mybatis提供了灵活的映射机制。本篇将详细讲解如何在Mybatis中实现一对多关联映射的查询操作。 首先,我们要明确一对多关联映射的基本概念。...

    Mybtis级联映射(一对一,一对多)例子

    在这个"Mybatis级联映射(一对一,一对多)例子"中,我们将深入探讨Mybatis如何处理一对一和一对多的关系映射。 在数据库设计中,一对一和一对多关系是很常见的。一对一关系指的是两个表中的一条记录最多只能与另一...

    一对多单向和双向映射

    本篇将详细探讨"一对多单向和双向映射"这一主题,结合标签中的"源码"和"工具",我们将深入理解这些概念,并可能涉及到具体的代码实现。 首先,映射是ORM框架的核心,它允许开发者将数据库表与Java类之间的关系进行...

    ORM对象关系映射

    内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。 ORM 技术包括...

Global site tag (gtag.js) - Google Analytics