salesforceapex-codeapexsalesforce-chattersalesforce-communities

Storing one Map values to Another


I just need to store Values from One Map 'which is having record from parent child nested query' to another Map.

Please see the below code that i am trying:



 Map<id,BR_OrderItem__c> FinalorderitemMap = new Map<id,BR_OrderItem__c>();

      Map<id,order> ordermap = new Map<id,order>([select Id,Name,Account.Name
    (select Id, name from Itens_do_pedido__r ),BR_TotalConvertedQuantity__c from Order where id in :TargetIDList  ]);


              for(order ordd : ordermap.values()){
                  FinalorderitemMap.put(ordd.id,ordd.Itens_do_pedido__r);

              }


Error that i am getting here: 

|System.QueryException: List has more than 1 row for assignment to SObject

Please suggest Exactly what i am doing wrong here.

All i want is to store realted child(order-item) record with corresponding       order as key.




Please suggest, Thanks in Advance.

Solution

  • This is because ordd.Itens_do_pedido__r is List<BR_OrderItem__c>. There are 2 ways to solve the issue.

    1.Define the Map as List<BR_OrderItem__c>:

    Map<Id, List<BR_OrderItem__c>> FinalorderitemMap = new Map<Id, List<BR_OrderItem__c>>();
    

    2.If you know that you will only have 1 child item against each parent, then you can go with the following option:

    for (order ordd : ordermap.values()) {
      if (ordd.Itens_do_pedido__r.isEmpty()) {
        continue;
      }
    
      FinalorderitemMap.put(ordd.id, ordd.Itens_do_pedido__r[0]);
    }