mORMot2 定义多对多关系

news/发布时间2024/5/14 3:53:43

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)
protectedfSource: TOrmProductSource;fDest: TOrmProductDest;fTime: TDateTime;
publishedproperty 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)
protectedfDestList: TOrmProductDestPivot;
publishedproperty 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方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/74067866.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

LFI to RCE [NewStarCtf]Include

记录一个没见过的RCE类型题目。先看源码:点击查看代码 <?phperror_reporting(0);if(isset($_GET[file])) {$file = $_GET[file];if(preg_match(/flag|log|session|filter|input|data/i, $file)) {die(hacker!);}include($file.".php");# Something in phpinfo.p…

k8s 入门

k8s 是什么? k8s 介于应用和服务器之间,能够通过配置协调多个应用服务。使用者通过配置 yaml 文件来将多个服务自动部署应用到各个服务器上,实现服务的自动扩缩容,并且具有高可用性(某台机器上服务宕机后,自动在另外的服务器上部署应用)。 k8s 架构原理 k8s 整体分为控制…

数据治理之数据质量管理

一、数据质量概述什么是数据质量数据质量差的危害数据质量维度(数据六大评价标准)什么是数据质量测量数据质量测量必须要有目的数据质量测量必须可重复数据质量测量必须可解释什么是数据质量管理二、数据问题根因分析什么是根因分析为什么要进行根因分析产生数据问题的阶段规…

Part-DB 配置流程

介绍 Part-DB是一个开源的器件管理工具,博主用于管理个人的电子器材,最近捣鼓了一下这个工具,由于手头还有一块闲置的赛昉星光2的开发板,所以我打算一起拿来捣鼓一下,如果不成功,就用树莓派(生气😠) 1.安装 大家可以直接按照 官方安装指导 来安装即可,我也是参考官方…

结对编程 小学四则运算

程序代码 #include<iostream> #include<vector> #include<algorithm> #include<string> #include<map> #include<stack> using namespace std; int check(int s1, int s2, int s3, char c1, char c2) {int num1;int num2;if (c2 == * || c…

四月二十五日 Android studio关于使用sqlite数据库

昨天早上六点就起来要去排队考科目一,实在是困得很,昨天晚上早早就睡了,其实解释为什么昨天没有博客。 一个好消息就是我顺利的考过了,刚到90,还是很惊险。 还是说一下最近在干什么,之前是一直用的MySQL连接我的Android studio,最近在学习使用它自带的一个sqlite数据库,…