implement eager loading to avoid n+1 problem