如何在 Eloquent 模型中使用事务

Bal*_*res 1 php laravel laravel-5

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

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

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

由于 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
Run Code Online (Sandbox Code Playgroud)

我该如何处理?

小智 7

我在 Laravel 之外使用 Eloquent ORM。

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

你可以添加一个基础模型扩展 \Illuminate\Database\Eloquent\Model。

<?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();
     }    
}
Run Code Online (Sandbox Code Playgroud)

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

Model::beginTransaction();

//do what you like.

Model::commit();

// OR

Model::rollBack();
Run Code Online (Sandbox Code Playgroud)