How to have second loop inside my first loop

I am using array-to-xml package and I have sample (static) data like this one

<RECIEVEITEM operation="Add" REQUESTID="1">             <TRANSACTIONID>264276</TRANSACTIONID>             <ITEMLINE operation="Add">                 <KeyID>1</KeyID>                 <ITEMNO>7GE65B</ITEMNO>                 <QUANTITY>5</QUANTITY>                 <ITEMUNIT>UNT</ITEMUNIT>                 <UNITRATIO>1</UNITRATIO>                 <ITEMRESERVED1 />                 <ITEMRESERVED2 />                 <ITEMRESERVED3 />                 <ITEMRESERVED4 />                 <ITEMRESERVED5 />                 <ITEMRESERVED6 />                 <ITEMRESERVED7 />                 <ITEMRESERVED8 />                 <ITEMRESERVED9 />                 <ITEMRESERVED10 />                 <ITEMOVDESC>PRINTER HP DESKJET 2135 (7GE65B) NEW</ITEMOVDESC>                 <UNITPRICE />                 <ITEMDISCPC />                 <TAXCODES />                 <GROUPSEQ />                 <POSEQ />                 <BRUTOUNITPRICE>0</BRUTOUNITPRICE>                 <WAREHOUSEID>345346</WAREHOUSEID>                 <QTYCONTROL>0</QTYCONTROL>                 <RISEQ />                 <SNHISTORY operation="Ret"><SERIALNUMBER>A1</SERIALNUMBER><EXPIREDDATE>2020-06-30</EXPIREDDATE><QUANTITY>1</QUANTITY><SNSIGN>1</SNSIGN></SNHISTORY>                 <SNHISTORY operation="Ret"><SERIALNUMBER>A2</SERIALNUMBER><EXPIREDDATE>2020-06-30</EXPIREDDATE><QUANTITY>1</QUANTITY><SNSIGN>1</SNSIGN></SNHISTORY>                 <SNHISTORY operation="Ret"><SERIALNUMBER>A3</SERIALNUMBER><EXPIREDDATE>2020-06-30</EXPIREDDATE><QUANTITY>1</QUANTITY><SNSIGN>1</SNSIGN></SNHISTORY>                 <SNHISTORY operation="Ret"><SERIALNUMBER>A4</SERIALNUMBER><EXPIREDDATE>2020-06-30</EXPIREDDATE><QUANTITY>1</QUANTITY><SNSIGN>1</SNSIGN></SNHISTORY>                 <SNHISTORY operation="Ret"><SERIALNUMBER>A5</SERIALNUMBER><EXPIREDDATE>2020-06-30</EXPIREDDATE><QUANTITY>1</QUANTITY><SNSIGN>1</SNSIGN></SNHISTORY>                 <RIID />             </ITEMLINE>             <INVOICENO>PO-TEST1</INVOICENO>             <INVOICEDATE>2020-06-30</INVOICEDATE>             <TAX1ID>T</TAX1ID>             <TAX1CODE>T</TAX1CODE>             <TAX2CODE />             <TAX1RATE>10</TAX1RATE>             <TAX2RATE>0</TAX2RATE>             <RATE>1</RATE>             <INCLUSIVETAX>0</INCLUSIVETAX>             <INVOICEISTAXABLE>1</INVOICEISTAXABLE>             <CASHDISCOUNT>0</CASHDISCOUNT>             <CASHDISCPC />             <INVOICEAMOUNT>0</INVOICEAMOUNT>             <TERMSID>Net 30</TERMSID>             <FOB />             <PURCHASEORDERNO />             <WAREHOUSEID>345346</WAREHOUSEID>             <DESCRIPTION>PO-TEST1</DESCRIPTION>             <SHIPDATE>2020-06-30</SHIPDATE>             <POSTED>0</POSTED>             <FISCALRATE>1</FISCALRATE>             <INVFROMPR />             <TAXDATE>2020-06-30</TAXDATE>             <VENDORID>PT ECS INDO JAYA</VENDORID>             <SEQUENCENO>PO-TEST1</SEQUENCENO>             <APACCOUNT>2000.01</APACCOUNT>             <SHIPVENDID />             <INVTAXNO2 />             <INVTAXNO1 />             <SSPDATE />             <EXPENSESOFBILLID />             <EXPENSESJOURNALDATETYPE />             <LOCKED_BY />             <LOCKED_TIME />         </RECIEVEITEM> 

As you can see tag SNHISTORY includes array, since RECIEVEITEM itself is inside an array I would like to know how can I achieve to have SNHISTORY array?

Code

Commented issue part for you to find is faster 🙂

public function exportReturn(Request $request) {     $returnProducts = ReturnProduct::with(['barcode', 'barcode.product', 'barcode.product.allBarcodes', 'outlet', 'user',])->get();      foreach($returnProducts as $item) {         $year = Carbon::createFromFormat('Y-m-d H:i:s', $item['created_at'])->year;         $month = Carbon::createFromFormat('Y-m-d H:i:s', $item['created_at'])->month;         $array  = [             "TRANSACTIONS" => [                 '_attributes' => [                     'OnError' => 'CONTINUE'                 ],                 'RECIEVEITEM' => [ // image 1                     '_attributes' => [                         'operation' => 'Add',                         'REQUESTID' => '1'                     ],                     'TRANSACTIONID' => $item['id'],                     'ITEMLINE' => [                         '_attributes' => [                             'operation' => 'Add'                         ],                         'KeyID' => $item['barcode']['product']['id'],                         'ITEMNO' => $item['barcode']['product']['sku'],                         'QUANTITY' => $item['barcodes']['product']->allBarcodes->count(),                         'ITEMUNIT' =>  $item['barcode']['product']['unit'],                         'UNITRATIO' => '1',                         'ITEMRESERVED1' => '',                         'ITEMRESERVED2' => '',                         'ITEMRESERVED3' => '',                         'ITEMRESERVED4' => '',                         'ITEMRESERVED5' => '',                         'ITEMRESERVED6' => '',                         'ITEMRESERVED7' => '',                         'ITEMRESERVED8' => '',                         'ITEMRESERVED9' => '',                         'ITEMRESERVED10' => '',                         'ITEMOVDESC' => $item['barcode']['product']['name'],                         'UNITPRICE' => $item['barcode']['product']['price'],                         'ITEMDISCPC' => '',                         'TAXCODES' => '',                         'GROUPSEQ' => '',                         'POSEQ' => '',                         'BRUTOUNITPRICE' => '0',                         'WAREHOUSEID' => $item['outlet']['code'],                         'QTYCONTROL' => '0',                         'RISEQ' => '',                         'SNHISTORY' => [ // array of product barcodes                             '_attributes' => [                                 'operation' => 'Ret'                             ],                             foreach($item['barcodes']['product']->allBarcodes as $bb) {  // this is WRONG (is just here for you to know about data that I need to place here "logic purpose only")                                 'SERIALNUMBER' => $bb['serial_number'] ? $bb['serial_number'] : $bb['u_serial_number'],                                 'EXPIREDDATE' => $bb['created_at'],                                 'QUANTITY' => '1',                                 'SNSIGN' => '1',                             }                         ],                         'RIID' => '',                     ],                     'INVOICENO' => 'POINS-001', //test                     'INVOICEDATE' => '2020-06-10', //test                     'TAX1ID' => 'T', //test                     'TAX1CODE' => 'T', //test                     'TAX2CODE' => '',                     'TAX1RATE' => '10', //test                     'TAX2RATE' => '0', //test                     'RATE' => '1', //test                     'INCLUSIVETAX' => '0', //test                     'INVOICEISTAXABLE' => '1', //test                     'CASHDISCOUNT' => '0', //test                     'CASHDISCPC' => '',                     'INVOICEAMOUNT' => '0', //test                     'TERMSID' => 'Net 30', //test                     'FOB' => '',                     'PURCHASEORDERNO' => '',                     'WAREHOUSEID' => $outlet['code'], //test                     'DESCRIPTION' => '', // reason of return goes here                     'SHIPDATE' => '2020-06-10', //test                     'POSTED' => '0', //test                     'FISCALRATE' => '1', //test                     'INVFROMPR' => '',                     'TAXDATE' => '2020-06-10', //test                     'VENDORID' => 'PT ECS INDO JAYA', //test                     'SEQUENCENO' => 'POINS-001', //test                     'APACCOUNT' => '2000.01', //test                     'SHIPVENDID' => '',                     'INVTAXNO2' => '',                     'INVTAXNO1' => '',                     'SSPDATE' => '',                     'EXPENSESOFBILLID' => '',                     'EXPENSESJOURNALDATETYPE' => '',                     'LOCKED_BY' => '',                     'LOCKED_TIME' => '',                 ]             ]         ];     }      $filename = 'returns.xml';     $result = ArrayToXml::convert($array, [         'rootElementName' => 'NMEXML',         '_attributes' => [             'EximID'=> "12551",             'BranchCode'=> $item['outlet']['code'],             'ACCOUNTANTCOPYID'=> ""         ]     ]);     Storage::disk('local')->put($filename, $result);     $fullPath = url('exports', $filename);      return response()->json([         'data' => $fullPath     ]); } 

Questions

  1. How to loop SNHISTORY data?

UPDATE

I have changed my code like:

$array = []; foreach($returnProducts as $item) {     $year = Carbon::createFromFormat('Y-m-d H:i:s', $item['created_at'])->year;     $month = Carbon::createFromFormat('Y-m-d H:i:s', $item['created_at'])->month;     foreach($item['barcode']['product']->allBarcodes as $bb) {         $shin[] = [             'SERIALNUMBER' => $bb['serial_number'] ? $bb['serial_number'] : $bb['u_serial_number'],             'EXPIREDDATE' => $bb['created_at'],             'QUANTITY' => '1',             'SNSIGN' => '1',         ];     }      $array['RECIEVEITEM'] = [         '_attributes' => [             'operation' => 'Add',             'REQUESTID' => '1'         ],         'TRANSACTIONID' => $item['id'],         'ITEMLINE' => [             '_attributes' => [                 'operation' => 'Add'             ],             'KeyID' => $item['barcode']['product']['id'],             'ITEMNO' => $item['barcode']['product']['sku'],             'QUANTITY' => $item['barcode']['product']->allBarcodes->count(),             'ITEMUNIT' =>  $item['barcode']['product']['unit'],             'UNITRATIO' => '1',             'ITEMRESERVED1' => '',             'ITEMRESERVED2' => '',             'ITEMRESERVED3' => '',             'ITEMRESERVED4' => '',             'ITEMRESERVED5' => '',             'ITEMRESERVED6' => '',             'ITEMRESERVED7' => '',             'ITEMRESERVED8' => '',             'ITEMRESERVED9' => '',             'ITEMRESERVED10' => '',             'ITEMOVDESC' => $item['barcode']['product']['name'],             'UNITPRICE' => $item['barcode']['product']['price'],             'ITEMDISCPC' => '',             'TAXCODES' => '',             'GROUPSEQ' => '',             'POSEQ' => '',             'BRUTOUNITPRICE' => '0',             'WAREHOUSEID' => $item['outlet']['code'],             'QTYCONTROL' => '0',             'RISEQ' => '',             'SNHISTORY' => [                 '_attributes' => [                     'operation' => 'Ret'                 ],                 $shin,             ],             'RIID' => '',         ],         'INVOICENO' => 'POINS-001', //test         'INVOICEDATE' => '2020-06-10', //test         'TAX1ID' => 'T', //test         'TAX1CODE' => 'T', //test         'TAX2CODE' => '',         'TAX1RATE' => '10', //test         'TAX2RATE' => '0', //test         'RATE' => '1', //test         'INCLUSIVETAX' => '0', //test         'INVOICEISTAXABLE' => '1', //test         'CASHDISCOUNT' => '0', //test         'CASHDISCPC' => '',         'INVOICEAMOUNT' => '0', //test         'TERMSID' => 'Net 30', //test         'FOB' => '',         'PURCHASEORDERNO' => '',         'WAREHOUSEID' => $item['outlet']['code'], //test         'DESCRIPTION' => '', // reason of return goes here         'SHIPDATE' => '2020-06-10', //test         'POSTED' => '0', //test         'FISCALRATE' => '1', //test         'INVFROMPR' => '',         'TAXDATE' => '2020-06-10', //test         'VENDORID' => 'PT ECS INDO JAYA', //test         'SEQUENCENO' => 'POINS-001', //test         'APACCOUNT' => '2000.01', //test         'SHIPVENDID' => '',         'INVTAXNO2' => '',         'INVTAXNO1' => '',         'SSPDATE' => '',         'EXPENSESOFBILLID' => '',         'EXPENSESJOURNALDATETYPE' => '',         'LOCKED_BY' => '',         'LOCKED_TIME' => '',     ]; } 

Now if I do return response()->json($shin); it returns data just as I need them

one

But When I try to use $shin in my code (as you see in my update code it doesn’t work.

Error? it give error about 100 lines above my code (really not helpful error message)

here is the error in preview tab

exception: "DOMException" file: "..........\vendor\spatie\array-to-xml\src\ArrayToXml.php" line: 152 message: "Invalid Character Error" 

here is where i track my controller in response tab

   {         "file": "........\\app\\Http\\Controllers\\Api\\XmlExportController.php",         "line": 869,         "function": "convert",         "class": "Spatie\\ArrayToXml\\ArrayToXml",         "type": "::"     },     {         "function": "exportReturn",         "class": "App\\Http\\Controllers\\Api\\XmlExportController",         "type": "->"     }, 

Any idea?

UPDATE 2

Well I managed to get my SNHISTORY looped data as array but the issue is while $item['barcode']['product']->allBarcodes only includes current product barcodes during print somehow it print all barcodes even from other products.

foreach($item['barcode']['product']->allBarcodes as $bb) {     $shin[] = [         '_attributes' => [             'operation' => 'Ret'         ],         'SERIALNUMBER' => $bb['serial_number'] ? $bb['serial_number'] : $bb['u_serial_number'],         'EXPIREDDATE' => $bb['created_at'],         'QUANTITY' => '1',         'SNSIGN' => '1',     ]; } 

and in my xml code

'SNHISTORY' => [   $shin, ], 

now it prints like:

two

result of return response()->json($item['barcode']['product']->allBarcodes);

three

any idea?

Add Comment
1 Answer(s)

Solved

After doing UPDATE 2 i could fix my extra data by adding $shin = []; above my loop code.

$shin = []; foreach($item['barcode']['product']->allBarcodes as $bb) {     $shin[] = [         '_attributes' => [             'operation' => 'Ret'         ],         'SERIALNUMBER' => $bb->serial_number ? $bb->serial_number : $bb->u_serial_number,         'EXPIREDDATE' => $bb->created_at,         'QUANTITY' => '1',         'SNSIGN' => '1',     ]; } 

and

'SNHISTORY' => [   $shin, ], 

Works as it should be now.

Add Comment

Your Answer

By posting your answer, you agree to the privacy policy and terms of service.