如何解决对列进行 api 调用时如何从同一表的另一列加载某些内容?
假设我有一个具有两个属性的任务表,一个作为 Id,另一个作为父 id 以及其他属性。
现在我有两种类型的任务: 一个是主任务,父任务 Id 为空,另一种类型的任务是子任务,父任务 Id 作为它所属的同一个表中的另一个任务。我可以创建一个既作为任务也作为子任务的任务(提供哪个任务是它的父任务)
当我调用 api 来获取任务时,我正在侧加载基于一个的所有属性和关联表 过滤器。
过滤器还可以选择显示父任务 ID 和 parent_task_name。
但这里的问题是,由于它们在同一个表中,因此 api 调用本身不会加载同一个表,而是进行额外调用以再次加载 parent_task 列。
我知道一开始我们可以创建两个表,一个作为任务,另一个作为子任务,但现在这是不可行的。
那么我如何避免仅用于获取 parent_task_name 的额外 api 调用,并在同一个 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
这样您就可以在单个查询中获取记录。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。