Dav*_*e S 5 salesforce soql apex-code
我有一个问题,我需要找到孩子的顶级家长帐户。我能做的最好的事情就是从孩子身上过滤掉
SELECT id, name, parent.id, parent.parent.id, parent.parent.parent.id,
FROM Account WHERE id=CHILD_ID
Run Code Online (Sandbox Code Playgroud)
然后进行迭代,直到找到指示顶级帐户的空parent.id。不是很优雅,也不能保证“顶级”帐户,我更喜欢类似的东西
SELECT id, name,
(SELECT id, name,
FROM Accounts WHERE id = CHILD_ID)
FROM Account WHERE parent.id = null
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为 salesforce 显然不允许您在帐户之间遍历父子关系。这里有人有什么建议吗?
你是对的 - 没有办法在单个 SOQL 查询中做到这一点。请注意,您的第二个所需查询也不会为您提供正确的结果(如果子帐户的直接父级没有父级,它只会返回记录)。
最好的选择是按照您在第一个代码块中所说的进行操作。您可以遍历最多 5 个对象深度的关系,因此您可以在 SOQL 选择中包含parent.parent.parent.parent.parent.id。迭代字段 - 如果它们都不为空,则发出第二个 SOQL 查询,将 CHILD_ID 更改为parent.parent.parent.parent.parent.id 的值。这样你就可以保证最终找到一个没有父母的父母(因为 salesforce 保证没有循环)。
您可以通过仅在查询中选择parent.id并执行更多单独的查询来使此操作更加优雅,但这将使您遇到API/调控器的限制,因此这可能不是一个好主意。
如果您可以使用自定义对象而不是帐户,则可以执行类似于第二个查询的操作,因为您将能够从该自定义对象到其自身遍历父子关系,但我仍然不确定是否存在单个查询即可满足您的需求。
| 归档时间: |
|
| 查看次数: |
9700 次 |
| 最近记录: |