function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Gaurav Jiwane 1Gaurav Jiwane 1 

Trigger on parent child

I habe an object named Teacher(Parent) Object and having a filed name as “Number of Active Students”(Number) and a having another Field on Student(Child) Object named as Active(Checkbox).

so how can i create

   Trigger to find the number of Active Students in “Number of Active Students” Fields when any Student record is created, deleted or undeleted.


please help ......
and please suggest any good youtube channel for learning salesforce development
Best Answer chosen by Gaurav Jiwane 1
CharuDuttCharuDutt
Hii Gaurav
Try Below Trigger As Example
trigger NumberOfActiveStudent on Student__c(After Insert,After Update,After Delete) {
List<Teacher__c> accList=new List<Teacher__c>();

    Set<Id> setAccIds = new Set<Id>();
    if(Trigger.isInsert){
         if(trigger.isAfter){
        for(Student__c con : Trigger.new){
            if(con.Teacher__c!= null && con.isActive__c == true){
            setAccIds.add(con.AccountId);
            	}
			}
		}
    } 
    system.debug('setAccIds ==> '+setAccIds);
    if(Trigger.isUpdate){
         if(trigger.isAfter){
        for(Student__c con : Trigger.new){ 
            if(con.Teacher__c!=Trigger.oldMap.get(con.Id).Teacher__c && con.isActive__c == true){
               	setAccIds.add(con.AccountId);
                setAccIds.add(Trigger.oldMap.get(con.Id).AccountId);
            	}
          
			}        
        }
    }
    if(Trigger.isDelete){
        if(trigger.isAfter){
        for(Student__c con : Trigger.old) { 
            if(con.Teacher__c!= null && con.isActive__c == true){
            setAccIds.add(con.AccountId);
            	}
        	}
        }
    }    
    for(Teacher__c acc :[Select id,Total_Active_Students__c ,(Select id,Teacher__c,IsActive__c from Students__r Where isActive__c = true) from Teacher__c where Id in : setAccIds]){
        Total_Active_Students__c = acc.Students__r.size();
        acclist.add(acc);
    }
    if(acclist.size()>0){
        update accList;     
    }
}
Please Mark It As Best Answer If It Helps
Thank You!

All Answers

CharuDuttCharuDutt
Hii Gaurav
Try Below Trigger As Example
trigger NumberOfActiveStudent on Student__c(After Insert,After Update,After Delete) {
List<Teacher__c> accList=new List<Teacher__c>();

    Set<Id> setAccIds = new Set<Id>();
    if(Trigger.isInsert){
         if(trigger.isAfter){
        for(Student__c con : Trigger.new){
            if(con.Teacher__c!= null && con.isActive__c == true){
            setAccIds.add(con.AccountId);
            	}
			}
		}
    } 
    system.debug('setAccIds ==> '+setAccIds);
    if(Trigger.isUpdate){
         if(trigger.isAfter){
        for(Student__c con : Trigger.new){ 
            if(con.Teacher__c!=Trigger.oldMap.get(con.Id).Teacher__c && con.isActive__c == true){
               	setAccIds.add(con.AccountId);
                setAccIds.add(Trigger.oldMap.get(con.Id).AccountId);
            	}
          
			}        
        }
    }
    if(Trigger.isDelete){
        if(trigger.isAfter){
        for(Student__c con : Trigger.old) { 
            if(con.Teacher__c!= null && con.isActive__c == true){
            setAccIds.add(con.AccountId);
            	}
        	}
        }
    }    
    for(Teacher__c acc :[Select id,Total_Active_Students__c ,(Select id,Teacher__c,IsActive__c from Students__r Where isActive__c = true) from Teacher__c where Id in : setAccIds]){
        Total_Active_Students__c = acc.Students__r.size();
        acclist.add(acc);
    }
    if(acclist.size()>0){
        update accList;     
    }
}
Please Mark It As Best Answer If It Helps
Thank You!
This was selected as the best answer
Gaurav Jiwane 1Gaurav Jiwane 1

Thank you @CharuDutt !!!! 
can You please suggest me some best channel to learn apex ?