Hepimiz her zaman böyle bir formda (veya uygun bir ORM olmadan) işlem bizim veritabanı arama, şal biliyorum:
$con = Propel::getConnection(EventPeer::DATABASE_NAME);
try {
$con->begin();
// do your update, save, delete or whatever here.
$con->commit();
} catch (PropelException $e) {
$con->rollback();
throw $e;
}
Bu şekilde işlem başarısız olursa, veritabanı doğru durumuna geri olduğunu garanti ederim.
Ama sorun o zaman, ben bir işlem yapmak bu işlem yanı sıra, başka bir veritabanı (Ben veri bankasının bir sütunda bir girdiyi güncelleme olduğunda bir örnek olacağını güncellemeniz gerektiğinde diyelim olduğunu DatabaseB bir sütunda başka girişi olmalı ) güncellendi. Bu durumda işlemek nasıl?
Kullanıcının bu benim kod, diyelim, ben güncelleştirilmesi gereken üç veritabanları (dbA, dbB, DBC):
$con = Propel::getConnection("dbA");
try {
$con->begin();
// update to dbA
// update to dbB
//update to dbc
$con->commit();
} catch (PropelException $e) {
$con->rollback();
throw $e;
}
Dbc başarısız olursa, ben dBA geri alma olabilir ama ben DBB geri alma olamaz.
Ben bu sorun veritabanı bağımsız olması gerektiğini düşünüyorum. Ben ORM kullanıyorum çünkü ve bu da bağımsız ORM olmalıdır.
Update: Some of the database transactions are wrapped in ORM, some are using naked PDO, oledb ( or whatever bare minimum language provided database calls). So my solution has to take care this.
Herhangi bir fikir?