Легко запрашивать родительские или дочерние данные объекта

SOQL - язык запросов объектов Salesforce - это механизм для получения данных объекта, напоминающий SQL. В то время как SQL включает в себя такие операции, как INSERT, ALTER и DELETE, SOQL ограничивается извлечением данных… по сути, только операторами SELECT.

Хотя это может показаться ограничивающим, на самом деле SOQL имеет множество улучшений качества жизни для работы с объектами Salesforce (sObjects). Одно из этих преимуществ - способ автоматического получения связанных родительских и дочерних данных без использования операторов JOIN.

В этой статье мы рассмотрим два примера: как включить данные родительского объекта в запрос SOQL и как включить данные дочернего объекта в запрос SOQL. В примерах будут использоваться стандартные объекты sObject, но эти концепции могут быть применены к настраиваемым объектам sObject с минимальными изменениями.

Запрос данных родительского объекта

Чтобы проиллюстрировать этот сценарий, мы рассмотрим запрос, чтобы включить имя учетной записи вместе с запросом к объекту Contact. Основной запрос для запроса контактов будет следующим:

SELECT Name FROM Contact

Поскольку Contact имеет отношение поиска к sObject учетной записи, запрос поля в Account (родительский sObject) так же прост, как включение поля (полей) в список с префиксом Account..

SELECT Name, Account.Id FROM Contact

Если вы знакомы с SQL, это 🤯 момент… это было для меня. Для тех, кто этого не делает, так будет выглядеть эквивалент SQL.

SELECT Name, Account.Id 
FROM Contact 
LEFT JOIN Account ON
Account.Id = Contact.AccountId

По сути, SOQL достаточно умен, чтобы понимать, что у sObjects есть отношения, и когда нам нужны данные от связанного объекта, они должны быть естественным образом отфильтрованы по базовому запросу.

Запрос данных дочернего объекта

В предыдущем примере мы проиллюстрировали, что SOQL знает, что у sObjects есть определенные отношения. На этот раз мы пойдем в другом направлении по лестнице, сделав запрос к sObject учетной записи, который включает дочерние данные из sObject контакта.

При выполнении запроса к sObject мы можем просто включить дочерние поля в список полей как вложенный запрос, заключенный в круглые скобки. Подключенный дочерний объект sObject будет правильно отфильтрован до родительского - ни JOIN, ни WHERE не требуется.

SELECT Id, (SELECT Name FROM Contacts) FROM Account

Несколько моментов, которые следует учитывать при включении полей дочерних объектов в запросы…

  1. В подзапросе мы используем множественное число «Контакты», а не «Контакт».
  2. Подзапрос возвращается как вложенный список объектов sObject.
  3. Пустой подзапрос имеет значение NULL, а не пустой список

Подзапрос может соответствовать почти всем обычным правилам для запроса SOQL - не стесняйтесь перечислять несколько полей или добавлять предложение WHERE, но не пытайтесь вложить другой подзапрос, потому что вы получите сообщение об ошибке.

Заключение

В то время как Salesforce может показаться ошеломляющим для непосвященных, существует множество механизмов повышения качества жизни, которые оптимизируют инструменты для платформы. Ярким примером является простота включения родительских или дочерних полей sObject в SOQL.

Подведем итог всему этому вводному руководству:

  1. Используйте имя sObject с точкой доступа для родительских полей
  2. Используйте круглые скобки и подзапрос для дочерних полей

Да пребудет с тобой «Сила»

Поделитесь своим опытом, вопросами и отзывами ниже. Следуйте Коду 85 для получения дополнительных руководств по программированию на простом языке. Спасибо за внимание!