
Explanation : 1.
List<Account> accList = [SELECT Id, Name, Phone, (SELECT Id, Name, Phone FROM Contacts) FROM Account WHERE Phone != null AND CreatedDate = LAST_WEEK];
List<Contact> conList = new List<Contact>();
if (!accList.isEmpty()) {
for (Account acc : accList) {
if (!acc.Contacts.isEmpty()) {
for (Contact con : acc.Contacts) {
if (con.Phone == null) {
con.Phone = acc.Phone;
conList.add(con);
}
}
}
}
}
if (!conList.isEmpty()) {
update conList;
}
b.
List<Account> accList = [SELECT Id, Name, Phone FROM Account WHERE CreatedDate = LAST_WEEK AND Phone != null];
Map<Id, Account> accIdToAccountMap = new Map<Id, Account> (accList);
/* Altearnate, you can use,
Map<Id, Account> accIdToAccountMap = new Map<Id, Account> ();
for ( Account acc : accList ) {
accIdToAccountMap.put(acc.Id, acc);
}
*/
List<Contact> conList = [SELECT Id, Name, Phone, AccountId FROM Contact WHERE AccountId IN:accIdToAccountMap.keySet()];
if (!conList.isEmpty()) {
List<Contact> conToBeUpdated = new List<Contact> ();
for (Contact con : conList) {
if (con.Phone == null) {
con.Phone = accIdToAccountMap.get(con.AccountId).Phone;
conToBeUpdated.add(con);
}
}
update conToBeUpdated;
}