Potrzebuję twojej pomocy przy użyciu transakcji w CakePHP.Transakcja bazy danych CakePHP 2.3.x
Mam model produktu, z klauzulą ma wiele do ceny i modeli nieruchomości (klucz product_id).
W moim modelu Produktu, dodaję
function begin() {
$db =& ConnectionManager::getDataSource($this->useDbConfig);
$db->begin($this);
}
function commit() {
$db =& ConnectionManager::getDataSource($this->useDbConfig);
$db->commit($this);
}
function rollback()
{
$db =& ConnectionManager::getDataSource($this->useDbConfig);
$db->rollback($this);
}
I ProductController używam save(), aby zapisać moje urządzenie, a następnie mój cenę i mienia. (Używam tylko save(), nie saveAll()).
Mój kod to:
$this->Product->begin();
$error = false;
if($this->Product->save($data)
{
//my functions and calculations
if(!$this->Price->save($data_one)
{
$error = true;
}
//calculations
if(!$this>Property->save($my_data)
{
$error = true;
}
}
if($error) {
$this->Product->rollback();
}
else
{
$this->Product->commit();
}
Problem polega na tym, że jeśli mam błąd wewnątrz Cena oszczędzania lub wiersza obiektu, produkt jest dodawany. Pomyślałbym, że gdy wystąpią jakiekolwiek błędy, żaden z moich wierszy nie zostanie dodany (tzn. Wycofanie go spowoduje usunięcie go).
Używam CakePHP 2.3.8
hi, ale mysql obsługuje tabele InnoDB i transakcje http://dev.mysql.com/doc/refman/5.0/en/commit.html –
@MarceloAymone: W tym w kontekście, oznacza ** MyISAM **. A to musi być nazywane "** engine **", a nie "format"! – Tuanitim
Czy transakcje nie są automatycznie używane w tabelach InnoDb? –