@springimport

Как в magento 2 присвоить id объекта для его элементов коллекции?

Требуется создать payment и его items (оплаченные заказы). Создать по отдельности не сложно, а как создать в транзакции - не знаю.
Пример кода:
$payment = $this->paymentFactory->create();
$payment->setCustomerId($order->getCustomerId());
$payment->setAmount($amount);
$payment->save();

$paymentOrder = $this->orderConvertor->toPaymentOrder($order);
$paymentOrder->setAmount($amount);
$paymentOrder->setPaymentId($payment->getId()); // <- проблема в этом
$paymentOrder->save();


Класс транзакции позволяет добавлять и сохранять элементы:
$transaction = $this->transactionFactory->create();
$transaction->addObject($payment);
$transaction->save();


Знаю как добавить items в payment и все это в транзакцию, но не ясно как задать payment_id для item в "середине транзакции".
Есть идея добавить метод afterSave и проходить по коллекции и каждому item назначать этот payment_id. Для Payment уже добавил коллекцию для этого.

Вообще, хотелось бы сделать как это делается в самой мадженте, уверен что это уже решено, но не знаю в каком месте подсмотреть.
  • Вопрос задан
  • 50 просмотров
Пригласить эксперта
Ответы на вопрос 1
@springimport Автор вопроса
Кажется, нашел.

namespace Magento\Sales\Model\ResourceModel\Order;

class Payment extends SalesResource
{
    // ...

    protected function _beforeSave(\Magento\Framework\Model\AbstractModel $object)
    {
        /**@var $object \Magento\Sales\Model\Order\Payment */
        parent::_beforeSave($object);
        if (!$object->getParentId() && $object->getOrder()) {
            $object->setParentId($object->getOrder()->getId());
        }
        return $this;
    }
}


В коде выше перед сохранением ресурсной модели payment (какая ирония) проверяется наличие "payment_id" и то, что предок имеет id. Думаю что это и есть оно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы