5
我需要您在CakePHP中使用事務的幫助。CakePHP 2.3.x數據庫事務
我有一個產品模型,子句hasMany到價格和屬性模型(關鍵product_id)。
在我的產品型號,我加
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);
}
而在ProductController的我用的save()來保存我的產品,然後我的價格和性能。 (我只使用save(),而不是saveAll())。
我的代碼是:
$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();
}
的問題是,如果我有折扣價格或屬性行內的錯誤,產品還加入。我會想,當我有任何錯誤時,我的行都不會被添加(即回滾會刪除它)。
我使用CakePHP 2.3.8
喜,不過,MySQL支持InnoDB表和交易 http://dev.mysql.com/doc/refman/5.0/en/commit.html –
@MarceloAymone:在這種上下文中,他的意思是** MyISAM **。這必須被稱爲'**引擎**',而不是'格式'! – Tuanitim
交易未在InnoDb表中自動使用嗎? –