Yii2:如何在事务中禁用/启用自动提交模式?

Yii2:如何在事务中禁用/启用自动提交模式?,yii2,Yii2,在Yii 1.1中,CDbConnection类中存在该属性。在Yii2中,类中没有此类属性。如何在事务中禁用和启用自动提交模式?或者我应该简单地使用以下方法: $db->query('SET autocommit=0;'); $transaction = $db->beginTransaction(); try { $model->save(); ... $transaction->commit(); } catch(Exception $e)

在Yii 1.1中,CDbConnection类中存在该属性。在Yii2中,类中没有此类属性。如何在事务中禁用和启用自动提交模式?或者我应该简单地使用以下方法:

$db->query('SET autocommit=0;');
$transaction = $db->beginTransaction();
try {
    $model->save();
    ...
    $transaction->commit();
} catch(Exception $e) {
    $transaction->rollback();
}
$db->query('SET autocommit=1;');

不需要这样做,因为\yii\db\Connection::beginTransaction调用了以下内容:

关闭自动提交模式

此外:

提交事务,将数据库连接返回到自动提交模式,直到下一次调用PDO::beginTransaction启动新事务

也适用于:

如果数据库设置为自动提交模式,此函数将在回滚事务后恢复自动提交模式

但是,您可以通过访问PDO对象并使用以下命令直接设置PDO值:

您还可以使用在初始化Yii::$app->db对象期间设置它们。在配置文件中:

'components' => [
    'db' => [
        'class' => '\yii\db\Connection',
        'dsn' => 'mysql:host=127.0.0.1;dbname=demo',
        'username' => 'root',
        'password' => '',
        'charset' => 'utf8',
        'attributes' => [
            PDO::ATTR_AUTOCOMMIT => false
        ]
    ],
],
'components' => [
    'db' => [
        'class' => '\yii\db\Connection',
        'dsn' => 'mysql:host=127.0.0.1;dbname=demo',
        'username' => 'root',
        'password' => '',
        'charset' => 'utf8',
        'attributes' => [
            PDO::ATTR_AUTOCOMMIT => false
        ]
    ],
],