Yanıtlar:
Muhtemelen birden fazla bağlı nesnenin toplamını kaydediyorsunuzdur. Bu nesnelerden hangisinin kök olduğunu belirleyin , örneğin:
[order] <------ this is the root
/ | \
billing_address | shipping_address
|
order_items
Güncelleme mantığını kökün kaynak modeline ekleyin ve orada bir işlem kullanın.
Birden çok model örneğini kaydetmek istiyorsanız, işlem modelini kullanabilirsiniz. \Magento\Framework\DB\TransactionFactory
Kaynak modelinize bir işlem fabrikası enjekte edin ve şu şekilde kullanın:
$saveTransaction = $this->transactionFactory->create();
$saveTransaction->addObject($objectToSave);
$saveTransaction->addObject($otherObjectToSave);
...
$saveTransaction->save();
Taahhüt veya geri alma save()
yöntem tarafından otomatik olarak işlenir .
Alternatif olarak, işlemleri doğrudan kullanabilirsiniz (aşağıdakilerden başka bir veritabanı güncellemesi kullanıyorsanız $model->save()
:
$connection = $this->getConnection();
$connection->beginTransaction();
try {
...
$connection->commit();
} catch (\Exception $e) {
$connection->rollBack();
throw $e;
}
save()
Kaynak modellerinin yöntemlerini dahili olarak çağırırlar , bu nedenle her biri ayrı işlemlere kaydedilir. Depolar genellikle bazı doğrulama mantığı içerir, bu nedenle genellikle düz kaynak modelisave()
yöntemleri yerine kullanılması önerilir .