Magento 2 - Сохранение полей пользовательского адреса доставки в таблице адресов для цитирования


Я выполнил все шаги из этого руководства , и оно хорошо работает для обновления пользовательских полей в таблице quote.

В моем случае мне нужно добавить пользовательские поля в quote_address и (позже) в таблицы customer_address_entity.

Я создал плагин для: <type name="Magento\Checkout\Model\ShippingInformationManagement">.

Что у меня есть на данный момент:

#Vendor/module/Plugin/Checkout/Model/Checkout/ShippingInformationManagementPlugin.php


public function beforeSaveAddressInformation(
    ShippingInformationManagement $subject,
    $cartId,
    ShippingInformationInterface $addressInformation
) {
    $this->logger->log(\Psr\Log\LogLevel::DEBUG, 'INDEXIS');

    $extAttributes = $addressInformation->getExtensionAttributes();

    $number = $extAttributes->getNumber();
    $complement = $extAttributes->getComplement();
    $district = $extAttributes->getDistrict();
    $area_code = $extAttributes->getAreaCode();
    $this->logger->log(\Psr\Log\LogLevel::DEBUG, "number: " . $number);
    $this->logger->log(\Psr\Log\LogLevel::DEBUG, "complement: " . $complement);
    $this->logger->log(\Psr\Log\LogLevel::DEBUG, "district:" . $district);
    $this->logger->log(\Psr\Log\LogLevel::DEBUG, "area_code:" . $area_code);


    $quote = $this->quoteRepository->getActive($cartId);

    $quote->setNumber($number);
    $quote->setComplement($complement);
    $quote->setDistrict($district);
    $quote->setAreaCode($area_code);
}

Он регистрирует значения в файле debug.log, но не обновляет поля в моей базе данных.

Я знаю, что моя ошибка заключается в попытке установить мои пользовательские поля в $this->quoteRepository. Поэтому мой вопрос: какой объект мне следует использовать для установки пользовательских полей в таблице quote_address?

Будет больше вопросов, связанных с этой темой, но только после того, как этот будет решен.

Author: Bruno Rodrigues, 2016-09-30

1 answers

Для сохранения адреса вам необходимо присвоить значение объекту адреса. Вот пример:

Здесь delivery_date - новый пользовательский столбец таблицы quote_address

$billingAddress = $addressInformation->getBillingAddress();
$billingAddress->setDeliveryDate('2016-09-30 12:22:00');

Если вам тоже нужно назначить shipping address, то вам нужно сделать это таким же образом. В основном magento использует две строки для адресов в предложении/заказе; Один адрес для выставления счетов и один для доставки.

$shippingAddress = $addressInformation->getShippingAddress();
$shippingAddress->setDeliveryDate('2016-09-30 12:22:00');
 4
Author: Sohel Rana, 2016-10-03 06:34:10