* DatabaseHandler 에서 생성된 VirtualConnection 의 여러개의 database connection 을 하나의 transaction 으로 관리 - DatabaseHandler 에 의해 생성된 VirtualConnection 들의 transaction 관리 - 각 VirtualConnection 가 갖는 connection 들은 연관성 없는 transaction 으로 처리됨 - TransactionHandler 로 단일 connection 같이 처리 - 하나 이상의 물리적으로 다른 connection 을 동일한 transaction 으로 처리 ## 사용법 ### Transaction * VirtualConnection 통해 TransactionHandler 에서 처리 php XeDB::beginTransaction(); XeDB::commit(); XeDB::rollBack();
Author: XE Developers (developers@xpressengine.com)
 /**
  * 실제 처리 될 connection 을 생성해서 반환.
  * > $name 은 config/database.php 에 설정 된 이름이며
  * config/xe.php database 에서 참조됨.
  *
  * @param null|string $connectionName database name
  * @return \Illuminate\Database\Connection
  */
 public function connect($connectionName = null)
 {
     if ($connectionName === 'default') {
         $connectionName = null;
     }
     $connection = $this->databaseManager->connection($connectionName);
     $this->transaction->setCurrent($connection);
     return $connection;
 }
 /**
  * Register the service provider.
  *
  * @return void
  */
 public function register()
 {
     DynamicModel::clearBootedModels();
     $this->app->singleton('xe.db.proxy', function ($app) {
         return ProxyManager::instance($app['xe.register']);
     });
     $this->app->singleton(['xe.db' => DatabaseHandler::class], function ($app) {
         $coupler = DatabaseCoupler::instance($app['db'], TransactionHandler::instance(), $app['xe.db.proxy'], new LaravelCache($app['cache']->driver('schema')));
         $proxyClass = $app['xe.interception']->proxy(DatabaseHandler::class, 'XeDB');
         return new $proxyClass($coupler, $app['config']->get('xe.database'));
     });
 }
 /**
  * set up
  *
  * @return void
  */
 public function setUp()
 {
     $transaction = TransactionHandler::instance();
     $this->transaction = $transaction;
 }