사용자 정의 개체로 관계 쿼리 만들기
학습 목표
이 유닛을 완료하면 다음을 수행할 수 있습니다.
- 스키마 빌더로 다이어그램을 해석하여 개체 관계를 식별할 수 있습니다.
- 사용자 정의 관계 이름을 식별하여 사용자 정의 개체의 쿼리에 사용할 수 있습니다.
- 사용자 정의 개체를 위한 하위-상위 쿼리를 만들 수 있습니다.
- 사용자 정의 개체를 위한 상위-하위 쿼리를 만들 수 있습니다.
Trail Together로 함께 따라하기
이 단계를 진행하면서 전문가와 함께 따라하고 싶으세요? Trailhead Live의 Trail Together 시리즈에 포함된 이 비디오를 시청하세요.
(뒤로 돌려 단계를 처음부터 다시 보고 싶은 경우, 이 클립은 51:38분 표식에서 시작된다는 것을 기억하세요.)
Trailhead Playground를 실행하고 패키지 설치하기
이 모듈의 나머지 부분에 나오는 예시와 실습 활동에서는 DreamHouse라는 샘플 부동산 애플리케이션을 사용합니다. Trailhead Playground에 앱을 설치하고 샘플 데이터를 가져오세요.
Trailhead Playground가 열려 있지 않은 경우 실행합니다. 조직에 패키지 설치라는 탭이 보이면 정상입니다. 1단계로 바로 진행하세요. 그렇지 않으면 앱 시작 관리자()에서 Playground Starter를 찾아서 연 후 절차를 따라해 보세요. Playground Starter App이 표시되지 않으면 이 링크를 DreamHouse 패키지에 복사하고 Trailhead 지원 팀에서 Install a Package or App to Complete a Trailhead Challenge(패키지 또는 앱을 설치하여 Trailhead 과제 완료)를 확인합니다.
- Install a Package(패키지 설치) 탭을 클릭합니다.
-
04t3h000004mBpiAAE
를 필드에 붙여 넣습니다. - Install(설치)을 클릭합니다.
- Install for Admins Only(관리자 전용으로 설치)를 선택한 다음 Install(설치)을 클릭합니다.
- 타사 액세스를 승인해 달라는 메시지가 표시되면 Yes, grant access…(예, 액세스 허용…)를 선택한 다음 Continue(계속)를 클릭합니다.
패키지 설치가 완료되면 확인 페이지가 표시되고 Playground와 연결된 주소로 이메일이 수신됩니다.
DreamHouse 데이터 가져오기
-
을 클릭하고 검색 상자에
Dream
을 입력한 다음 DreamHouse 앱을 선택합니다. - Settings(설정) 탭을 클릭합니다. (Settings(설정) 탭이 보이지 않는 경우 More(더 보기) 목록을 확장하세요.)
- Import Data(데이터 가져오기)를 클릭하세요.
- Properties(부동산) 탭을 클릭하고 샘플 데이터를 살펴봅니다.
DreamHouse 스키마 살펴보기
지금까지는 표준 개체만 쿼리했지만 이제 사용자 정의 개체를 쿼리하는 방법을 살펴보겠습니다. DreamHouse 앱의 개체를 사용할 것이므로 먼저 DreamHouse 스키마(데이터 모델)를 살펴보며 데이터가 구조화되는 방식을 파악해 보겠습니다.
스키마 빌더 열기
- Trailhead Playground에서 을 클릭하고 Setup(설정)을 선택합니다.
- Object Manager(개체 관리자)를 클릭합니다.
- Schema Builder(스키마 빌더)를 클릭합니다.
- Objects(개체) 탭에서 Clear All(모두 지우기)을 클릭합니다.
- Broker__c가 아닌 Broker가 표시된다면 View Options(옵션 보기)를 클릭한 다음 Display Element Names(요소 이름 표시)를 선택합니다.
-
코드에는 API 이름 필드를 사용한다는 점을 기억하세요. Display Element Names(요소 이름 표시)에 필드 레이블이 아닌 API 이름 필드가 표시됩니다. (사용자 정의 개체의 API 이름은 끝에 __c[밑줄 밑줄 c]가 추가된 사용자 정의 개체 이름입니다.)
- 'Select from list(목록에서 선택)'에서 Custom Objects(사용자 정의 개체)를 선택합니다.
- Broker__c 및 Property__c를 선택합니다. 이러한 항목이 이 유닛에서 사용할 사용자 정의 개체입니다.
- Auto-Layout(자동 레이아웃)을 클릭합니다.
- 부동산 필드를 살펴봅니다.
-
Property__c 사용자 정의 개체에 Picture__c 및 Broker__c의 두 가지 사용자 정의 필드가 있는지 확인합니다. (사용자 정의 필드의 API 이름은 끝에 __c[밑줄 밑줄 c]가 추가된 사용자 정의 필드 이름입니다.)
- Property__c 및 Broker__c를 연결하는 관계 선 위로 마우스를 가져갑니다.
-
Property__c 사용자 정의 개체의 Broker__c 사용자 정의 필드에서 Broker__c 사용자 정의 개체로 조회 관계가 형성됩니다.
- Property__c 요소에서 톱니바퀴 아이콘을 클릭한 다음 View Object(개체 보기)를 선택합니다.
개체 관리자에 Property__c 개체가 표시됩니다. - Fields & Relationships(필드 및 관계)를 클릭합니다.
- Broker 필드 레이블을 클릭합니다.
- Lookup Options(조회 옵션) 섹션에서 Child Relationship Name(하위 관계 이름)을 찾습니다.
이제 Property__c가 Broker__c의 하위 요소이며 부동산과 중개업자 사이의 관계 이름이 Properties라는 점을 알게 되었습니다. (관계 이름은 일반적으로 하위 개체 이름의 복수 형식입니다.)
사용자 정의 개체 쿼리
사용자 정의 개체를 쿼리하는 것은 표준 개체를 쿼리하는 것과 상당 부분 유사하지만 몇 가지 차이점이 있습니다.
다음 요구 사항을 고려하세요.
'Get a list of all properties with the property address, picture, and assigned broker.(부동산 주소, 사진, 할당된 중개업자를 사용해 모든 부동산 목록을 가져옵니다.)'
꽤 간단합니다, 그렇죠? Property__c 사용자 정의 개체를 쿼리하고 Address__c, Picture__c, Broker__c 사용자 정의 필드를 가져와야 합니다. 시작해 보겠습니다.
쿼리 만들기
- 쿼리 편집기에서 다음을 입력합니다.
SELECT Address__c, Picture__c, Broker__c FROM Property__c
-
Execute(실행)를 클릭합니다.
결과의 첫 여섯 개 행이 다음과 같아야 합니다.쿼리 결과 - 총 행 수: 12 Address__c
Picture__c
Broker__c
18 Henry st
https://s3-us-west-2.amazonaws.com...
a016g000007Yxfn...
24 Pearl st
https://s3-us-west-2.amazonaws.com...
a016g000007Yxfn...
72 Francis st
https://s3-us-west-2.amazonaws.com...
a016g000007Yxfn...
32 Prince st
https://s3-us-west-2.amazonaws.com...
a016g000007Yxfn...
110 Baxter st
https://s3-us-west-2.amazonaws.com...
a016g000007Yxfn...
448 Hannover St
https://s3-us-west-2.amazonaws.com...
a016g000007Yxfn...
Broker__c 열의 내용이 그다지 유용하지 않다는 점을 눈치채셨을 겁니다. 이는 Property__c 개체의 Broker__c 필드가 Broker 개체에 대한 조회이기 때문입니다. 조회 관계가 있는 필드는 관련 개체의 Id를 포함하고 있습니다. Broker의 이름을 확인하려면 관계 쿼리가 필요합니다.
하위-상위 쿼리 만들기
Broker__c가 Property__c의 상위 요소이므로 하위-상위 쿼리가 필요합니다. 관계 이름과 점 표기법을 사용하여 Broker__c 개체의 Name 필드를 가져올 것입니다.
- 쿼리 편집기에서 Broker__c를 다음과 같이 Broker__c.Name으로 바꿉니다
SELECT Address__c, Picture__c, Broker__c.Name FROM Property__c
-
Execute(실행)를 클릭합니다. (오류 메시지가 표시됩니다.)
오류 메시지
필드 경로에서 관계 'Broker__c'를 파악할 수 없습니다. 사용자 정의 관계를 사용하려면 사용자 정의 관계 이름 뒤에 '__r'을 붙여야 합니다.
이런! 무슨 일일까요? Broker__c는 Property 개체의 사용자 정의 필드라는 점을 기억하세요. 필요한 것은 Broker__c 관련 개체입니다.
쿼리에 사용자 정의 관계 이름 사용하기
Broker__c 관련 개체(Broker__c 필드 아님)를 지정하려면 __c를 __r(밑줄-밑줄-r)로 바꿉니다. Broker__r은 사용자 정의 관계 이름입니다. 이는 관계를 Property__c에서 Broker__c 개체로 전환시켜야 한다는 것을 의미합니다. 이 부분의 쿼리가 다음과 같은 메시지를 표시합니다. 'Get the Name field from the related Broker__c custom object.(관련 Broker__c 사용자 정의 개체에서 Name 필드를 가져옵니다.)' 쿼리를 업데이트해 보겠습니다.
- 쿼리 편집기에서
Broker__c
를 다음과 같이Broker__r
로 바꿉니다.SELECT Address__c, Picture__c, Broker__r.Name FROM Property__c
-
Execute(실행)를 클릭합니다.
결과의 첫 여섯 개 행이 다음과 같아야 합니다.쿼리 결과 - 총 행 수: 12 Address__c
Picture__c
Broker__r.Name
18 Henry st
https://s3-us-west-2.amazonaws.com...
Caroline Kingsley
24 Pearl st
https://s3-us-west-2.amazonaws.com...
Michael Jones
72 Francis st
https://s3-us-west-2.amazonaws.com...
Jonathan Bradley
32 Prince st
https://s3-us-west-2.amazonaws.com...
Jennifer Wu
110 Baxter st
https://s3-us-west-2.amazonaws.com...
Olivia Green
448 Hannover St
https://s3-us-west-2.amazonaws.com...
Miriam Aupont
훨씬 나아졌군요. 이제 Broker 사용자 정의 개체에 Id가 아닌 Name 필드가 표시됩니다.
상위-하위 쿼리 만들기
관련 중개업자를 사용해 각 부동산을 성공적으로 반환했습니다. 반대의 경우는 어떨까요?
요구 사항:
'Get the names of all brokers with the address and price of all properties assigned to each broker.(각 중개업자에 할당된 모든 부동산의 주소 및 가격을 사용해 모든 중개업자의 이름을 가져옵니다.)'
중개업자의 목록이 필요하므로 기본 쿼리에서 Broker__c 개체를 쿼리합니다.
SELECT Name FROM Broker__c
Broker는 상위 요소이므로 상위-하위 쿼리에 하위 개체의 보조 쿼리가 필요합니다. 보조 쿼리에 하위 관계 이름을 사용해 보겠습니다.
Property__c 개체의 보조 쿼리에 대한 관계 이름은 무엇일까요? Property 개체의 Broker 필드에 대한 세부 정보를 확인합니다.
Child Relationship Name(하위 관계 이름)이 Properties입니다. 이는 사용자 지정 관계이기 때문이며 쿼리에 사용할 때는 __r을 붙입니다(Properties__r
). 따라서 보조 쿼리(괄호 안)는 다음과 같습니다.
(SELECT Address__c, Price__c FROM Properties__r
)
기본 쿼리에 보조 쿼리를 삽입하면 전체 쿼리는 다음과 같습니다.
SELECT Name, (SELECT Address__c, Price__c FROM Properties__r) FROM Broker__c
쿼리 실행
- 쿼리 편집기에서 다음을 입력합니다.
SELECT Name, (SELECT Address__c, Price__c FROM Properties__r) FROM Broker__c
-
Execute(실행)를 클릭합니다.
결과의 첫 여덟 개 행이 다음과 같아야 합니다.
완벽해요! 모든 중개업자 목록과 각 중개업자 부동산의 쉼표로 구분된 목록을 확보했습니다. 쿼리를 만드는 경우 Developer Console의 쿼리 편집기를 사용하면 SOQL 쿼리를 쉽게 테스트하고 수정할 수 있습니다.