每当我有一个插入/更新的多个查询时,我就会尝试新的东西。我就此使用数据库事务。
$this->transaction->beginTransaction();
try {
$trucker_user->update([
'username' => $request->getParam('username'),
'first_name' => $request->getParam('first_name'),
'middle_name' => $request->getParam('middle_name'),
'last_name' => $request->getParam('last_name'),
'contact_number' => $request->getParam('contact_number'),
'email' => $request->getParam('email'),
'status' => ($trucker_id) ? 1 : $request->getParam('status')
]);
if ($trucker_id === false) {
$trucker_user->userTrucker()->update([
'trucker_id' => $request->getParam('trucker_id')
]);
}
$this->transaction->commit();
} catch(\Exception $e) {
$this->transaction->rollBack();
throw $e;
}
所以问题是,当我有多个查询插入/更新时,这是一个好习惯吗?我将使用数据库事务吗?
我知道,当发生不良事件时会进行回滚,这是一个好主意。但是每当我使用它时,总是在多个查询中并不是有点过分了吗?
答案 0 :(得分:1)
交易是一种旨在保证一致性的工具。如果第二个更新/插入操作在第二个失败时回滚,则需要进行事务处理。
在您的示例中,您更新了trucker_user
个字段,然后在某些情况下,您还会更新其id
。您应该向自己提出的问题是"如果trucker_user
更新失败,我是否要回滚所有id
次更新?"
答案可能是肯定的,因为您必须保持两个操作之间的一致性,或者因为,如果第二个操作失败,您必须重试它,并且再次执行所有操作比查找进程被中断的位置更容易(所以你可以从那里开始。)