Contents
■コレクションの種別
- List:順序付け+インデックス付け
- Set:重複を含まない+順序付けされていない
- Map:キーと値のペア
■Apexのデータ操作
DBから情報をメモリ内に取得→メモリ内でデータを変更→変更情報をDBに反映
■SOQLの結果を配列を格納する
・Listの場合
List<Opportunity> oppList = [SELECT Id FROM Opportunity];
・Setの場合
Set<Opportunity> oppSet = new Set<Opportunity>([SELECT Id FROM Opportunity]);
・Mapの場合
Map<Id, Opportunity> oppMap = new Map<Id, Opportunity>([SELECT Id FROM Opportunity]);
※SetとMapはSOQLの結果を直接受け取ることはできないため、コンストラクタを利用する必要がある。
※一般に、SOQLの戻り値のデータ型にはsObjectとList<sObject>の二つがあり、前者は取得されるレコードが一つであると確定している場合にのみ使用する。
バインド変数を使用した静的SOQL(インラインSOQL)
String searchfor = 'SalesforceKid' ;Contact[] Contacts = [SELECT xyz__c, Firstname, Lastname FROM Contact WHERE Lastname = :searchfor];
動的SOQL
LString myTestString = 'TestName';List<sObject> sobjList = Database.query('SELECT Id FROM MyCustomObject__c WHERE Name = :myTestString');
※Apexの処理の中で実行するSOQLを動的に編集し、StringでDatabase.queryにパスする
○参照方法まとめ
子から親(標準) | List<Contact> contact = [SELECT FirstName, Account.Name From Contact]; |
子から親(カスタム) | List<child__c> ch = [SELECT Id, Name, parent__r.FirstName, parent__r.LastName__c from child__c WHERE age__c < 25]; ※cがrになる |
親から子(標準) | List<Account> account = [SELECT Name,(SELECT FirstName, LastName FROM contacts) FROM Account]; ※子リレーション名 |
親から子(カスタム) | List<Opportunity> Parent__c = [SELECT ParentName__c, Age__c, (SELECT Child_Name__c, Dob__c FROM Child__r) FROM Parent__c]; ※子リレーション名__r |
※「親から子」ではそれぞれcontactsとChild__rが子リレーション名である
よくあるクエリまとめ
子のいる親だけ取得 | SELECT id FROM Account WHERE Id IN (SELECT accountid FROM Opportunity) |
■基本用語
SQL:Structured Query Language
SOQL:Salesforce Object Query Language
sObject:Lightning PlatformのDBに保存できるApex内のObjectのこと
API参照名:ApexでsObject内の項目を参照するために使用される名前