Antworten:
Sie speichern wahrscheinlich ein Aggregat mehrerer verbundener Objekte. Bestimmen Sie, welches dieser Objekte die Wurzel ist , zum Beispiel:
[order] <------ this is the root
/ | \
billing_address | shipping_address
|
order_items
Fügen Sie die Aktualisierungslogik in das Ressourcenmodell des Stamms ein und verwenden Sie dort eine Transaktion.
Wenn Sie mehrere Modellinstanzen speichern möchten, können Sie das Transaktionsmodell verwenden. Fügen Sie eine Transaktionsfactory \Magento\Framework\DB\TransactionFactory
in Ihr Ressourcenmodell ein und verwenden Sie sie wie folgt:
$saveTransaction = $this->transactionFactory->create();
$saveTransaction->addObject($objectToSave);
$saveTransaction->addObject($otherObjectToSave);
...
$saveTransaction->save();
Commit oder Rollback werden von der save()
Methode automatisch verarbeitet .
Alternativ können Sie Transaktionen direkt verwenden (wenn Sie andere Datenbankaktualisierungen verwenden als $model->save()
:
$connection = $this->getConnection();
$connection->beginTransaction();
try {
...
$connection->commit();
} catch (\Exception $e) {
$connection->rollBack();
throw $e;
}
save()
Methoden von Ressourcenmodellen auf, sodass jede von ihnen in separaten Transaktionen gespeichert wird. Repositorys enthalten häufig eine Validierungslogik. Daher wird im Allgemeinen empfohlen, sie anstelle einfachersave()
Methoden für Ressourcenmodelle zu verwenden.