如何在Eloquent模型中使用事务

时间:2016-04-21 09:06:24

标签: php laravel laravel-5

我使用Capsule来管理项目中的数据库连接,并使用Model来操作数据库,如下所示:

// Init Eloquent ORM Connection
$capsule = new Capsule;
$capsule->addConnection(Config::getDbConfig());
$capsule->addConnection(Config::getRadiusDbConfig(), 'radius');
$capsule->bootEloquent();

我想在对数据库执行大修改时使用事务,但类Model中没有相关方法。

由于Capsule,我无法使用Illuminate \ Suooprt \ Facades \ DB,因为它报告了这个错误:

PHP Fatal error:  Uncaught RuntimeException: A facade root has not been set. in
E:\Projects\ss-panel\vendor\illuminate\support\Facades\Facade.php:210

我该如何处理?

1 个答案:

答案 0 :(得分:4)

我在Laravel外面使用Eloquent ORM。

以下是我如何开始交易的解决方案。

您可以添加基础模型extend \ Illuminate \ Database \ Eloquent \ Model。

<default-suggestion-source>
    <word collation="http://marklogic.com/collation/de">
        <field name="my-suggest" />
    </word>
</default-suggestion-source>

然后,您可以像这样使用它:

<?php

use Illuminate\Database\Eloquent\Model as EloquentModel;

class Model extends EloquentModel
{
     public static function beginTransaction()
     {
          self::getConnectionResolver()->connection()->beginTransaction();
     }

     public static function commit()
     {
         self::getConnectionResolver()->connection()->commit();
     }

     public static function rollBack()
     {
         self::getConnectionResolver()->connection()->rollBack();
     }    
}