我有些麻烦理解为什么不提交这两笔交易。
我有一个运行MYSQL数据库且禁用了自动提交的应用程序;
在一次请求中,我做了两次交易,让我们说:
public function createDownload($user_id,$filename,$path){
$response = null;
try {
DB::transaction(function () use ($filename,$path,$user_id) {
$output = DB::table($this->table)->insert(array('file_name' => $filename, 'path' => $path,'user_id'=>$user_id));
$this->response = $output;
});
DB::commit();
DB::disconnect('mysql');
return $this->response;
} catch (Exception $e) {
DB::rollback();
Log::error($e->getMessage());
return False;
}
}
public function finishedDownload($filename,$path){
DB::reconnect('mysql');
$response = null;
try {
DB::transaction(function () use ($path) {
$output = DB::table($this->table)->where('path', '=', $path)->update(array('status'=>1));
$this->response = $output;
});
Log::info($this->response);
DB::commit();
return $this->response;
} catch (Exception $e) {
DB::rollback();
Log::error($e->getMessage());
return False;
}
}
在这种情况下,假设在一个用户的请求中,Controller A在同一个请求中调用两个方法:
createDownload(1,toto,toto/toto);
----
----
lines of code
----
----
finishedDownload(toto,toto);
基本上,在第一种方法中,应该插入记录,在几行代码之后,更新相同的记录。
BUT!它插入记录并提交,但是当假设更新它时,它不会更新记录! 当我检查更新后查询返回的内容时,它返回1确认查询已进行,但它没有执行commit();
任何人都可以解释一下原因,以及我如何解决这个错误?
谢谢!
答案 0 :(得分:0)
在没有任何运气的情况下使用transaction()尝试不同的事情后,我确实使用了beginTransaction()并使用commit或rollback关闭它们。 这种方式很成功。 谢谢!