mysql - 对列进行 api 调用时,如何从同一个表的另一列侧加载某些内容?
问题描述
假设我有一个任务表,其中包含两个属性,一个作为 Id,另一个作为父 id 以及其他属性。
现在我有两种类型的任务:一种是主任务,其父我为空,另一种类型的任务是子任务,其父我将作为它所属的同一个表中的另一个任务。我可以创建一个既作为任务也作为子任务的任务(提供哪个任务是它的父任务)
当我调用 api 来获取任务时,我会基于过滤器加载所有属性和关联的表。
过滤器还可以选择显示父任务 id 和 parent_task_name。
但是这里的问题是,由于它们在同一个表中,所以 api 调用不是侧加载同一个表本身,而是进行额外调用以再次加载 parent_task 列。
我知道我们可以在一开始就创建两个表,一个作为任务,另一个作为子任务,但现在这是不可行的。
那么我如何避免额外的 api 调用只是为了获取 parent_task_name 并在同一个 api 调用中加载父任务 ID 及其名称。
解决方案
由于您尚未共享代码,因此不确定您是如何尝试这样做的,但我能想到的一种方法是使用连接:
records = ChildModel.joins('INNER JOIN task_table AS parent ON task_table.parent_id = parent.id').select('task_table.*, parent.name AS parent_task_name').where(id: array_of_ids)
这task_table
将是您的表的名称。
因此,我们在这里使用别名将表与自身连接起来,并从中获取父任务属性。要获取父任务名称:
records.last.parent_task_name
这样,您将在单个查询中获取记录。
推荐阅读
- matlab - 如何将 3d 矩阵拆分为子 2d 矩阵?
- javascript - 为什么我尝试向表中添加新行(使用 oa 表元素制作)不断出现和消失?
- google-apps-script - IMPORTRANGE 指的是带有链接的单元格,而不是链接本身。和范围使用单元格值而不是工作表名称
- strcpy - 嵌入式 C strcpy 仅复制前 10 个字节
- express - 快速车把不会呈现数据
- php - 将数据从while循环插入数据库php
- windows-10 - Windows 10 多选项排序
- azure - Azure 数据工厂可以调用 Azure 虚拟机吗?
- c# - 如何在 AWS-SDK-NET 中正确使用 SES 的 SendBulkTemplatedEmailRequest?
- google-chrome - 尝试从移动设备扫描条形码时“不支持媒体流 API”移动 chrome [vue]