Подскажите, делает ли "rollBack" снятие блокировки с таблицы если её указывать как приведено ниже?
Код: Выделить всё
const ESTIMATE_IDENTITY_TABLE_NAME = 'estimate_identity';
const ESTIMATE_IDENTITY_SEQ = 'estimate_identity_id_seq';
public function getNextEstimateIncrement()
{
$year = (int)date('Y');
$connection = \Yii::$app->getDb();
$transaction = $connection->beginTransaction();
$connection->createCommand('LOCK TABLE estimate_identity IN SHARE ROW EXCLUSIVE MODE')->execute();
try {
$numberOfRecordsInYear = (int)$connection->createCommand('SELECT COUNT(*) FROM ' . self::ESTIMATE_IDENTITY_TABLE_NAME . ' WHERE year = :year')
->bindParam(':year', $year)->queryOne()['count'];
if ($numberOfRecordsInYear === 0) {
$connection->createCommand('DELETE FROM ' . self::ESTIMATE_IDENTITY_TABLE_NAME)->execute();
$connection->createCommand('ALTER SEQUENCE ' . self::ESTIMATE_IDENTITY_SEQ . ' RESTART WITH 1')->execute();
}
$connection->createCommand('INSERT INTO ' . self::ESTIMATE_IDENTITY_TABLE_NAME . ' (year) VALUES (:year)')->bindParam(':year', $year)->execute();
$reserved = $connection->createCommand('SELECT id, year FROM ' . self::ESTIMATE_IDENTITY_TABLE_NAME . ' ORDER BY id DESC LIMIT 1 ')->queryOne();
$transaction->commit();
} catch (\Exception $e) {
$transaction->rollBack();
throw $e;
} catch (\Throwable $e) {
$transaction->rollBack();
throw $e;
}
var_dump(['year' => $reserved['year'], 'increment' => $reserved['id']]);
}