* Illuminate\Database 를 이용해 데이터 연결 * 다중 database 연결/Transaction 지원 * 각 package, plugin 에서 database connection 을 선택적으로 이용 할 수 있도록 지원 * xe.php 의 database config 설정 - laravel database config 를 이용해서 Database 연결 * Illuminate\Database 의 인터페이스 지원 - 다중 connection, proxy 처리를 위해 추가 인터페이스 지원 ## app binding * xe.db 로 바인딩 되어 있음 * XeDB facade 제공 ## interception * XeDB ## 사용법 ### Database connection * 기본 설정으로 되어 있는 database connect * database.php 의 default 설정으로 연결 php VirtualConnectionInterface $connector = XeDB::connection(); * xe.php 의 database config 'configName' 설정으로 되어 있는 database connect php $connector = XeDB::connection('configName'); ### Transaction * VirtualConnection 통해 TransactionHandler 에서 처리 * 모든 Connection 에 transaction 처리됨 php XeDB::beginTransaction(); XeDB::commit(); XeDB::rollBack(); ### Query * Database 에 query 하기 위해서 VirtualConnectionInterface 의 table(), dynamic() 메소드 사용 * table(), dynamic() 은 DynamicQuery 반환 * DynamicQuery 는 Illuminate\Database\Query\Builder 사용 * dynamic() 은 ProxyManager 를 사용하도록 함 (DynamicField 의 DatabaseProxy 참고) php $connector = app('xe.db'); $query = XeDB::table('user'); $result = XeDB::table('user')->first(); $proxyConfig = [... config for proxy ...]; $query = XeDB::dynamic('tableName', $proxyConfig);
Author: XE Developers (developers@xpressengine.com)
Inheritance: implements Illuminate\Database\ConnectionResolverInterface
Esempio n. 1
0
 /**
  * Execute the console command.
  *
  * @return mixed
  */
 public function fire()
 {
     $tables = $this->input->getOption('tables');
     if ($tables == false) {
         $this->error('캐시를 위한 테이블 이름이 없습니다.');
     }
     $tables = explode(',', $tables);
     if (count($tables) == 0) {
         $this->error('캐시를 위한 테이블 이름이 없습니다.');
     }
     $config = $this->databaseHandler->getConfig();
     // 어떤 connection 에 table 이 있는지 알 수 없음
     $connectors = [];
     foreach ($config as $name => $settings) {
         $connectors[] = $this->databaseHandler->connection($name);
     }
     $cacheNames = [];
     /** @var \Xpressengine\Database\VirtualConnectionInterface $connector */
     foreach ($connectors as $connector) {
         foreach ($tables as $table) {
             if (in_array($table, $cacheNames) === true) {
                 continue;
             }
             if ($connector->setSchemaCache($table, true) === true) {
                 $cacheNames[] = $table;
             }
         }
     }
     if (count($cacheNames) === 0) {
         $this->error('캐시된 테이블이 없습니다. 테이블 이름을 확인하세요.');
     } else {
         $this->info(implode(',', array_unique($cacheNames)) . ' 테이블을 캐시 했습니다.');
     }
 }
 /**
  * test database connect
  *
  * @return void
  */
 public function testDatabaseConnect()
 {
     $defaultConnection = m::mock('Illuminate\\Database\\Connection');
     $defaultConnection->shouldReceive('getName')->andReturn('default');
     $databaseManager = m::mock('Illuminate\\Database\\DatabaseManager');
     $databaseManager->shouldReceive('getDefaultConnection')->andReturn($defaultConnection);
     $databaseManager->shouldReceive('setDefaultConnection');
     $queryBuilder = m::mock('Xpressengine\\Database\\DynamicQuery');
     $defaultConnector = m::mock('Xpressengine\\Database\\VirtualConnection');
     $defaultConnector->shouldReceive('getName')->andReturn('default');
     $defaultConnector->shouldReceive('table')->andReturn($queryBuilder);
     $someConnector = m::mock('Xpressengine\\Database\\VirtualConnection');
     $someConnector->shouldReceive('getName')->andReturn('some');
     $coupler = m::mock('Xpressengine\\Database\\DatabaseCoupler');
     $coupler->shouldReceive('getConnector')->with(DatabaseHandler::DEFAULT_CONNECTOR_NAME)->andReturn($defaultConnector);
     $coupler->shouldReceive('getConnector')->with('some')->andReturn($someConnector);
     $coupler->shouldReceive('addConnector')->with('default', $defaultConnector)->andReturn($defaultConnector);
     $coupler->shouldReceive('addConnector')->with('some', $someConnector)->andReturn($someConnector);
     $coupler->shouldReceive('databaseManager')->andReturn($databaseManager);
     /** @var \Xpressengine\Database\DatabaseCoupler $coupler */
     $handler = new DatabaseHandler($coupler, $this->databaseConfig);
     // make default connector
     $connector = $handler->connection();
     $this->assertInstanceOf('Xpressengine\\Database\\VirtualConnection', $connector);
     $this->assertEquals('default', $connector->getName());
     $connection = $handler->getDefaultConnection();
     $this->assertInstanceOf('Illuminate\\Database\\Connection', $connection);
     $this->assertEquals('default', $connection->getName());
     $handler->setDefaultConnection('some1_con');
     // test magic method
     $queryBuilder = $handler->table('table');
     $this->assertInstanceOf('Xpressengine\\Database\\DynamicQuery', $queryBuilder);
 }