我需要你在 CakePHP 中使用事务的帮助。
我有一个 Product 模型,带有子句 hasMany 到 Price 和 Property 模型(关键 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