Php Yii事务从何处开始

Php Yii事务从何处开始,php,mysql,yii,transactions,Php,Mysql,Yii,Transactions,我想知道从哪里开始交易是否重要 示例1: $transaction = Yii::app()->db->beginTransaction(); try { $savedSuccessfully = $object->save(); $transaction->commit(); } catc

我想知道从哪里开始交易是否重要

示例1:

            $transaction = Yii::app()->db->beginTransaction();
            try
            {
                $savedSuccessfully = $object->save();
                $transaction->commit();
            }
            catch (Exception $ex)
            {

                $transaction->rollBack();
                $result = $e->getMessage();                    
            }
            $transaction = Yii::app()->db->beginTransaction();
            try
            {
                $object = $model()::model()->findByPk(1); //!!!!!!! - line
             //   what makes the difference
                $savedSuccessfully = $object->save();
                $transaction->commit();
            }
            catch (Exception $ex)
            {

                $transaction->rollBack();
                $result = $e->getMessage();                    
            }
示例2:

            $transaction = Yii::app()->db->beginTransaction();
            try
            {
                $savedSuccessfully = $object->save();
                $transaction->commit();
            }
            catch (Exception $ex)
            {

                $transaction->rollBack();
                $result = $e->getMessage();                    
            }
            $transaction = Yii::app()->db->beginTransaction();
            try
            {
                $object = $model()::model()->findByPk(1); //!!!!!!! - line
             //   what makes the difference
                $savedSuccessfully = $object->save();
                $transaction->commit();
            }
            catch (Exception $ex)
            {

                $transaction->rollBack();
                $result = $e->getMessage();                    
            }
事务应该在从数据库中选择数据之前启动,还是在更新/插入数据之前启动?我会代替我来处理它吗


谢谢

示例2将是选择的解决方案

通过在事务中检索模型,您可以确保它在整个更改过程中保持一致


如果在事务外部检索模型(如示例1所示),其他线程/用户可以在提交更改之前更改相应的数据库条目。因此,您可能会得到潜在的不一致数据。

示例2将是首选的解决方案

通过在事务中检索模型,您可以确保它在整个更改过程中保持一致


如果在事务外部检索模型(如示例1所示),其他线程/用户可以在提交更改之前更改相应的数据库条目。因此,您可能会得到潜在的不一致数据。

实际上,第二种方法是正确的,如果您保存的数据更为重要,如银行交易或支付系统,那么示例2是非常正确的方法。例如,您正在执行一些类似这样的代码

insert into table 1
select from table 1
insert into table 2
update table 2 
select from table 1.

所以,若从第一个开始启动事务,若任何查询失败,它将回滚所有查询,这将更加高效。例如在线支付系统

事实上,第二种方法是正确的,如果您要保存更重要的数据,如银行交易或支付系统,则示例2是非常正确的方法。例如,您正在执行一些类似这样的代码

insert into table 1
select from table 1
insert into table 2
update table 2 
select from table 1.

所以,若从第一个开始启动事务,若任何查询失败,它将回滚所有查询,这将更加高效。例如在线支付系统

如何初始化$transaction对象?啊,我忘记了最重要的部分。添加将启动您的事务当事务启动时,如果模型有旧数据会怎样?在开始和结束事务之间执行的每个查询都将提交或回滚您如何初始化$transaction对象?啊,我忘记了最重要的部分。当事务开始时,如果模型有旧数据呢?在开始和结束事务之间执行的每个查询都会提交或回滚我也感觉到了。但我找不到任何yii文档,其中说明第二种方式是首选方式。这只是我的猜测。如果yii将检查数据是否与当前模型对应,并以这种方式确保使用第一种方法是安全的,该怎么办?我也感觉到了。但我找不到任何yii文档,其中说明第二种方式是首选方式。这只是我的猜测。如果yii将检查数据是否符合当前模型,并以这种方式确保使用第一种方法的安全性,该怎么办?