Tôi cần bạn trợ giúp bằng cách sử dụng các giao dịch trong CakePHP.Giao dịch cơ sở dữ liệu CakePHP 2.3.x
Tôi có một Mô hình sản phẩm, với mệnh đề làMany to Price and Property models (key product_id).
Trong mô hình sản phẩm của tôi, tôi thêm
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);
}
Và trong ProductController tôi sử dụng tiết kiệm() để tiết kiệm sản phẩm của tôi, và sau đó giá và tài sản của tôi. (Tôi chỉ sử dụng save(), không saveAll()).
Mã của tôi là:
$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();
}
Vấn đề là nếu tôi có một lỗi bên trong tiết kiệm Giá hoặc hàng tài sản, các sản phẩm vẫn đang gia tăng. Tôi đã nghĩ rằng khi tôi có bất kỳ lỗi nào, sẽ không có hàng nào của tôi được thêm vào (tức là một lần khôi phục sẽ xóa nó).
Tôi đang sử dụng CakePHP 2.3.8
hi, nhưng, mysql hỗ trợ các bảng InnoDB và các giao dịch http://dev.mysql.com/doc/refman/5.0/en/commit.html –
@MarceloAymone: Trong đó bối cảnh, anh ấy có nghĩa là ** MyISAM **. Và điều đó phải được gọi là '** engine **', không phải 'định dạng'! – Tuanitim
Các giao dịch không được tự động sử dụng trong các bảng InnoDb? –