mORMot2 定义多对多关系

mORMot2 定义多对多关系

处理“has many”和“has many through”关系时,主要涉及到的是多对多关系的数据库设计和管理。以下是对您提供的文本的技术性翻译和解释:

  • 多对多关系是通过一个专门为这种关系创建的表来追踪的,将这个关系转变为两个指向相反方向的一对多关系。
  • 默认情况下,必须创建两个TOrm(即INTEGER类型)字段,命名为“Source”和“Dest”。第一个字段指向源记录(具有TOrmMany发布属性的那个),第二个字段指向目标记录。请注意,根据设计,这些源/目标表是作为TOrm*指针存储的,因此在32位系统上限制为32位ID值。
  • 您应该首先创建一个继承自TOrmMany的类型,该类型将定义枢轴表,并在需要时提供可选的“through”参数。

下面的代码示例展示了如何在Pascal中定义这样的类型:

// 产品目标类的定义
TOrmProductDest = class(TOrm);

// 前置声明产品源类,因为后面会在TOrmProductDestPivot中使用
TOrmProductSource = class;

// 产品源和目标之间的关联类(即枢轴表)
TOrmProductDestPivot = class(TOrmMany)
protected
  fSource: TOrmProductSource;
  fDest: TOrmProductDest;
  fTime: TDateTime;
published
  property Source: TOrmProductSource map Source column read fSource;
  property Dest: TOrmProductDest map Dest column read fDest;
  property AssociationTime: TDateTime read fTime write fTime;
end;

// 产品源类定义
TOrmProductSource = class(TOrm)
protected
  fDestList: TOrmProductDestPivot;
published
  property DestList: TOrmProductDestPivot read fDestList;
end;
  • 在所有情况下,任何TOrmMany的子类中都必须至少声明两个作为TOrm子项的'Source'和'Dest'发布属性,因为它们对于'多对多'关系是必需的。
  • 当TOrm中存在TOrmMany发布属性时,它会被TOrm.Create自动初始化。
  • 要向枢轴表中添加一些关联,请使用ManyAdd()方法。
  • 要检索关联,请使用ManySelect()方法。
  • 要删除关联,请使用ManyDelete()方法。
  • 要读取所有目标记录的ID,请使用DestGet()方法。
  • 要读取目标记录和相关的“through”字段内容,请使用FillMany,然后使用FillRow、FillOne和FillRewind方法来循环遍历记录。
  • 要读取所有源记录和相关的“through”字段内容,请使用FillManyFromDest,然后使用FillRow、FillOne和FillRewind方法。
  • 要在连接到枢轴表后读取所有目标ID,请使用DestGetJoined方法。

热门相关:军少夜宠:小甜妻,乖!   来自异世界的诺诺   重生世家子   末日乐园   重生世家子