Коннектор базы данных MuleSoft Вставить вложенный массив

У меня есть объект с вложенными массивами, и мне нужно вставить эту полезную нагрузку в 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"
    }
  ]
}

person Learner    schedule 01.05.2020    source источник


Ответы (1)


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

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

<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`) 

ЗНАЧЕНИЯ (: po_date,: имя_компании,: имя_покупателя,: телефон_ покупателя,: адрес_компании,: город_компании,: состояние_компании,: код_компании,: адрес_поставки,: город_поставки,: состояние_поставки,: почтовый_код_поставки,: номер_почты)

где вы указываете Вставить SQL и параметры ниже в отдельном окне  введите описание изображения здесь

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

введите здесь описание изображения

весь поток должен выглядеть так:  введите описание изображения здесь

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

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

person Alex    schedule 03.05.2020
comment
Привет @alex, Спасибо, что ответили. Я использую Mule 4. Извините за непонятный вопрос. Но начнем: у меня есть 3 таблицы: Order, Item, Order_Item. po_number (заказ), item_number (элемент) - внешние ключи в таблице order_item. Я хочу, чтобы все эти вставки выполнялись с использованием одного коннектора базы данных (для этого я включил все 3 состояния sql). Я могу сделать это один за другим (вставить заказ, вставить элемент, а затем связать order_item). Но пытаюсь сделать все с помощью одного коннектора. Не уверен, возможно ли это. - person Learner; 04.05.2020
comment
Конечно, это возможно. Сначала вставьте, возьмите новый первичный ключ другим sql, вставьте массовую вставку с этим первичным ключом. Все, как обычно. Здесь нет никакой магии. Вы можете расширить массив элементов для вставки с помощью только что полученного первичного ключа с помощью техники, описанной на simpleflatservice.com/mule4/ MergeArraysItems.html - person Alex; 04.05.2020