MuleSoft Database Connector Вставить вложенный массив - PullRequest
0 голосов
/ 01 мая 2020

У меня есть объект, который имеет вложенные массивы, и мне нужно вставить эту полезную нагрузку в json. Может ли кто-нибудь помочь мне с этим

Вот это SQL:

INSERT INTO `sys`.`order` (`po_date`, `company_name`, `buyer_name`, `buyer_phone`, `company_address`, `company_city`, `company_state`, `company_postal_code`, `shipment_address`, `shipment_city`, `shipment_state`, `shipment_postal_code`, `po_number`) 
    VALUES (:po_date, :company_name, :buyer_name, :buyer_phone, :company_address, :company_city, :company_state, :company_postal_code, :shipment_address, :shipment_city, :shipment_state, :shipment_postal_code, :po_number);
INSERT INTO `sys`.`item` (`name`, `price`, `quantity`, `item_number`) 
    VALUES (:item_name, :item_price, :item_quantity, :item_number);
INSERT INTO `sys`.`order_item` ( `order_ref`, `item_ref`) 
    VALUES ( :order_ref, :item_ref);

и вот вход, который я отправляю в базу данных.

{
  "po_date": "2/5/2020",
  "company_name": "McCullough, Howe and Graham",
  "buyer_name": "Jeno MacCracken",
  "buyer_phone": "518-508-5392",
  "shipment_postal_code": "12237",
  "po_number": "16-492-5465",
  "items": [
    {
      "item_name": "43-583-0978",
      "item_price": "Sodium Chloride",
      "item_quantity": "26",
      "item_number": "802.41"
    },
    {
      "item_name": "71-788-5293",
      "item_price": "Ciprofloxacin",
      "item_quantity": "100",
      "item_number": "608.64"
    }
  ],
  "order_items": [
    {
      "order_ref": null,
      "item_ref": "43-583-0978"
    },
    {
      "order_ref": null,
      "item_ref": "71-788-5293"
    }
  ]
}

1 Ответ

0 голосов
/ 03 мая 2020

Я могу вам помочь, но мне нужны детали режима. Это Мул 4 или Мул 3? Где отсутствуют параметры, такие как company_address?

В общем случае в Mule 4 вы должны создать операторы вставки, которые выглядят следующим образом:

<db:insert doc:name="Insert" doc:id="639efcf2-6422-41c7-b533-b558179efeb9" config-ref="Database_Config">
    <db:sql >INSERT INTO `sys`.`order` (`po_date`, `company_name`, `buyer_name`, `buyer_phone`, `company_address`, `company_city`, `company_state`, `company_postal_code`, `shipment_address`, `shipment_city`, `shipment_state`, `shipment_postal_code`, `po_number`) 

VALUES (: po_date,: company_name,: customer_name,: покупатель_phone ,: company_address,: company_city,: company_state,: company_postal_code,: shipment_address,: shipment_city,: shipment_state,: shipment_postal_code,: po_number)

, где вы предоставляете Вставить SQL и параметры ниже в отдельном окне enter image description here

Это для первого утверждения, которое является единственным. Для двух других операторов вы делаете то же самое, но в Bulk Insert, где SQL выглядят аналогично вашим, но входные данные - это массивы из вашей полезной нагрузки

enter image description here

весь поток должен выглядеть вот так enter image description here

На самом деле я не вижу, как эти 3 SQL связаны. Я ожидаю некоторого использования общих данных (например, shipment_postal_code), сохраненных для каждого заказа. Но это не в ваших SQL.

Это было бы легко сделать путем объединения элементов массива, как описано здесь https://simpleflatservice.com/mule4/MergeArraysItems.html, а затем с помощью массива этих объединенных элементов для вставки элементов в базу данных. .

...