首页 > 其他分享 >mORMot2 定义多对多关系

mORMot2 定义多对多关系

时间:2024-04-25 16:44:05浏览次数:17  
标签:关系 定义 Source TOrm TOrmMany through read 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方法。

标签:关系,定义,Source,TOrm,TOrmMany,through,read,mORMot2
From: https://www.cnblogs.com/hieroly/p/18158022

相关文章

  • 自定义error 类型
    packagemainimport( "errors" "fmt")typeerrorCreateVolumestruct{ sstring}funcNewErrorCreateVolume(textstring)error{ returnerrorCreateVolume{text}}func(eerrorCreateVolume)Error()string{ returne.s}funcIs......
  • 在Win10(Win11)或Win Server的WSL上自定义安装Ubuntu(无微软商店)
     在Win10(Win11)WinServer里的WSL上自定义安装Ubuntu(无微软商店) 什么是WSLWSL是Windows系统里的Linux子系统,WindowsSubsystemforLinux(WSL)。我们可以在WindowsServer2016(或Win10/Win11等)上安装UbuntuWindowsSubsystemforLinux(WSL),可以在不退出Windows系......
  • 什么是自定义导入钩子(import hooks),他的作用
    自定义导入钩子(importhooks)是Python的导入系统中的一种机制,允许开发者自定义模块的查找和加载过程。在Python中,导入模块通常涉及几个步骤:查找模块、加载模块、初始化模块和定义模块。导入钩子可以在这些步骤中的任意一个插入自定义行为。自定义导入钩子的主要作用是扩展或......
  • day23-必备SQL和表关系及授权
    1.必备SQL语句上一节讲解了最基础SQL语句:增删改查,其实在日常的开发中还有很多必备的SQL语句。这一部分的SQL语句都是围绕着对表中的数据进行操作的。提示:今天的所有操作我都只会在MySQL自带的客户端工具上进行操作。例如:现在创建如下两张表。createdatabaseday26dbdef......
  • 自定义双向循环链表基本函数接口
    自定义双向循环链表的函数接口/********************************************************************* 文件名称: 双向循环链表的函数接口* 文件作者:[email protected]* 创建日期:2024/04/24* 文件功能:对双向链表的增删改查功能的定义* 注意事项:No......
  • WPF自定义FixedColumnGrid布局控件
    按照上一节所讲,我已经对布局系统又所了解。接下来我就实现一个布局控件FixedColumnGrid。1.基础版布局控件机制如下,FixedColumnGrid将子控件按照水平排列,每行满两列后换行。每个控件大小相同,高度固定为50。第一步,先重载测量和排列方法protectedoverrideSizeMeasureOverrid......
  • mpcmdrun.exe 是 Windows Defender 的命令行界面工具,用于运行 Windows Defender 的扫
    mpcmdrun.exe是WindowsDefender的命令行界面工具,用于运行WindowsDefender的扫描和其他安全操作,如更新病毒定义文件、运行快速扫描等。它是WindowsDefender的一部分,用于保护系统免受恶意软件和其他安全威胁的侵害。这个程序通常自动运行,并在后台处理安全任务,以......
  • vis.js关系图
    代码案例<!DOCTYPEhtml><htmllang="en"><head><title>Network</title><scripttype="text/javascript"src="https://unpkg.com/vis-network/standalone/umd/vis-network.min.js"......
  • 利用自定义流程表单开发的优势,实现流程化发展!
    要想实现流程化发展,通过低代码技术平台以及自定义流程表单开发的力量,可以将效率大大提升,便于企业进行数字化管理。拥有够灵活、可维护、易操作等优势特点的低代码技术平台拥有强劲的市场竞争力,逐渐在市场中脱颖而出,如果将自定义流程表单开发的优势特点发挥极致,就能快速实现流程化......
  • vis.js自定义标签3d图形
    代码案例<!DOCTYPEhtml><html><head><title>Graph3Ddemo</title><style>body{font:10ptarial;}</style><scripttype="text/javascript"src=......