Magento 2 – usare Transaction per salvare oggetti

Magento 2 – usare Transaction per salvare oggetti

Nessun commento su Magento 2 – usare Transaction per salvare oggetti

 

Magento 2 è la nuova versione della piattaforma E-commerce che offre nuove e interessanti funzionalità. Tra queste Transaction per salvare oggetti. Una funzionalità poco conosciuta, che risulta però molto utile se si desidera garantire uno stato coerente nel database. Con una singola transazione è possibile combinare molti oggetti da salvare .

In tal caso sono possibili due esiti:

  • Transazione riuscita
    garantisce che tutte le operazioni SQL all’interno della transazione siano eseguite senza problemi. Quindi i dati sono validi e vengono salvati in db.
  • Errore di transazione
    qualcosa è accaduto durante l’esecuzione della transazione. I sistemi di transazione forniscono una funzione chiamata rollback in cui i dati vengono ripristinati all’istante prima dell’inizio della transazione.

Magento 2 in alcuni casi  non sembra garantire un comportamento corretto nelle operazioni verso il db. Un esempio è il mal funzionamento con “rollback della transazione asimmetrica”, ossia il salvataggio di default di tutte le informazione riguardati più tabelle. Tale malfunzionamento può essere risolto usando alternativamente:

  • TransactionFactory
  • Custom SQL statement transaction

TransactionFactory

Il seguente codice mostra come utilizzare TransactionFactory in Magento 2:

class MyClass

{

protected $saveTransaction;

public function __construct

\Magento\Framework\DB\TransactionFactory $transactionFactory

){

$this->saveTransaction = $transactionFactory->create();

}

public function saveManyObjects() {

$this->saveTransaction->addObject($order);

$this->saveTransaction->addObject($customer);

$this->saveTransaction->addObject($customObject);

$this->saveTransaction->save();

}

}

Se si esegue il metodo saveManyObjects() di questa classe, tutti gli oggetti specificati vengono salvati contemporaneamente. Per una transazione è necessario iniettare la classe \ Magento \ Framework \ DB \ TransactionFactory, che offre tutte le funzionalità necessarie. È possibile aggiungere oggetti da salvare con il metodo addObject(). Si possono aggiungere oggetti quali: ordini, clienti, prodotti o persino oggetti personalizzati. Tramite il metodo save() viene eseguito automaticamente un commit o una rollback in base all’esito dell’operazione garantendo uno stato coerente dei dati.

Custom SQL statement transactions

Se si vuole usare istruzioni SQL custom utilizzando le transazioni è possibile riferirsi al seguente codice di esempio:

$connection = $this->getConnection();

$connection->beginTransaction();

try {

$connection->commit();

} catch (\Exception $e) {

$connection->rollBack();

throw $e;

}

È possibile chiamare il metodo beginTransaction() per inizializzare una transazione sull’oggetto “connection” dell’utente. In seguito si possono creare le istruzioni di inserimento o aggiornamento. Con commit() vengono rese persistenti le operazioni sul database. Se qualcosa non è andato a buon fine, il costrutto try catch chiamerà una transaction rollBack per ripristinare uno stato coerente del database e genererà un errore.

In conclusione Magento 2 offre tutto il necessario per utilizzare le transazioni. Una transazione è uno strumento utile per rendere sicure le modifiche al database, impedendo di corrompere un database se qualcosa non ha avuto esito positivo.

Giovanni Montanile

About the author:

Laureato in ingegneria Informatica. Appassionato per l'informatica e i vari linguaggi di programmazione e con una buona attitudine al problem solving.

Related Posts

Leave a comment

Back to Top