Легко запрашивать родительские или дочерние данные объекта
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
Несколько моментов, которые следует учитывать при включении полей дочерних объектов в запросы…
- В подзапросе мы используем множественное число «Контакты», а не «Контакт».
- Подзапрос возвращается как вложенный список объектов sObject.
- Пустой подзапрос имеет значение NULL, а не пустой список
Подзапрос может соответствовать почти всем обычным правилам для запроса SOQL - не стесняйтесь перечислять несколько полей или добавлять предложение WHERE, но не пытайтесь вложить другой подзапрос, потому что вы получите сообщение об ошибке.
Заключение
В то время как Salesforce может показаться ошеломляющим для непосвященных, существует множество механизмов повышения качества жизни, которые оптимизируют инструменты для платформы. Ярким примером является простота включения родительских или дочерних полей sObject в SOQL.
Подведем итог всему этому вводному руководству:
- Используйте имя sObject с точкой доступа для родительских полей
- Используйте круглые скобки и подзапрос для дочерних полей
Да пребудет с тобой «Сила»
Поделитесь своим опытом, вопросами и отзывами ниже. Следуйте Коду 85 для получения дополнительных руководств по программированию на простом языке. Спасибо за внимание!