답변:
여러 개의 연결된 개체 집합을 저장하고있을 수 있습니다. 다음 중 어떤 객체가 루트 인지 확인하십시오 .
[order] <------ this is the root
/ | \
billing_address | shipping_address
|
order_items
루트의 자원 모델에 업데이트 로직을 추가하고 트랜잭션을 사용하십시오.
여러 모델 인스턴스를 저장하려는 경우 트랜잭션 모델을 사용할 수 있습니다. \Magento\Framework\DB\TransactionFactory
자원 모델에 트랜잭션 팩토리 를 주입하고 다음과 같이 사용하십시오.
$saveTransaction = $this->transactionFactory->create();
$saveTransaction->addObject($objectToSave);
$saveTransaction->addObject($otherObjectToSave);
...
$saveTransaction->save();
확약 또는 롤백은 save()
메소드에 의해 자동으로 처리됩니다 .
또는 트랜잭션을 직접 사용할 수 있습니다 (다른 데이터베이스 업데이트를 사용하는 경우 $model->save()
:
$connection = $this->getConnection();
$connection->beginTransaction();
try {
...
$connection->commit();
} catch (\Exception $e) {
$connection->rollBack();
throw $e;
}
save()
으로 자원 모델의 메소드를 호출 하므로 각각 별도의 트랜잭션에 저장됩니다. 리포지토리에는 종종 일부 유효성 검사 논리가 포함되어 있으므로 일반적으로 일반 리소스 모델save()
방법 대신 사용하는 것이 좋습니다 .