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
?
Будет больше вопросов, связанных с этой темой, но только после того, как этот будет решен.
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');