123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- <?php
- namespace Illuminate\Database\Capsule;
- use PDO;
- use Illuminate\Container\Container;
- use Illuminate\Database\DatabaseManager;
- use Illuminate\Contracts\Events\Dispatcher;
- use Illuminate\Support\Traits\CapsuleManagerTrait;
- use Illuminate\Database\Eloquent\Model as Eloquent;
- use Illuminate\Database\Connectors\ConnectionFactory;
- class Manager
- {
- use CapsuleManagerTrait;
- /**
- * The database manager instance.
- *
- * @var \Illuminate\Database\DatabaseManager
- */
- protected $manager;
- /**
- * Create a new database capsule manager.
- *
- * @param \Illuminate\Container\Container|null $container
- * @return void
- */
- public function __construct(Container $container = null)
- {
- $this->setupContainer($container ?: new Container);
- // Once we have the container setup, we will setup the default configuration
- // options in the container "config" binding. This will make the database
- // manager work correctly out of the box without extreme configuration.
- $this->setupDefaultConfiguration();
- $this->setupManager();
- }
- /**
- * Setup the default database configuration options.
- *
- * @return void
- */
- protected function setupDefaultConfiguration()
- {
- $this->container['config']['database.fetch'] = PDO::FETCH_OBJ;
- $this->container['config']['database.default'] = 'default';
- }
- /**
- * Build the database manager instance.
- *
- * @return void
- */
- protected function setupManager()
- {
- $factory = new ConnectionFactory($this->container);
- $this->manager = new DatabaseManager($this->container, $factory);
- }
- /**
- * Get a connection instance from the global manager.
- *
- * @param string|null $connection
- * @return \Illuminate\Database\Connection
- */
- public static function connection($connection = null)
- {
- return static::$instance->getConnection($connection);
- }
- /**
- * Get a fluent query builder instance.
- *
- * @param string $table
- * @param string|null $connection
- * @return \Illuminate\Database\Query\Builder
- */
- public static function table($table, $connection = null)
- {
- return static::$instance->connection($connection)->table($table);
- }
- /**
- * Get a schema builder instance.
- *
- * @param string|null $connection
- * @return \Illuminate\Database\Schema\Builder
- */
- public static function schema($connection = null)
- {
- return static::$instance->connection($connection)->getSchemaBuilder();
- }
- /**
- * Get a registered connection instance.
- *
- * @param string|null $name
- * @return \Illuminate\Database\Connection
- */
- public function getConnection($name = null)
- {
- return $this->manager->connection($name);
- }
- /**
- * Register a connection with the manager.
- *
- * @param array $config
- * @param string $name
- * @return void
- */
- public function addConnection(array $config, $name = 'default')
- {
- $connections = $this->container['config']['database.connections'];
- $connections[$name] = $config;
- $this->container['config']['database.connections'] = $connections;
- }
- /**
- * Bootstrap Eloquent so it is ready for usage.
- *
- * @return void
- */
- public function bootEloquent()
- {
- Eloquent::setConnectionResolver($this->manager);
- // If we have an event dispatcher instance, we will go ahead and register it
- // with the Eloquent ORM, allowing for model callbacks while creating and
- // updating "model" instances; however, it is not necessary to operate.
- if ($dispatcher = $this->getEventDispatcher()) {
- Eloquent::setEventDispatcher($dispatcher);
- }
- }
- /**
- * Set the fetch mode for the database connections.
- *
- * @param int $fetchMode
- * @return $this
- */
- public function setFetchMode($fetchMode)
- {
- $this->container['config']['database.fetch'] = $fetchMode;
- return $this;
- }
- /**
- * Get the database manager instance.
- *
- * @return \Illuminate\Database\DatabaseManager
- */
- public function getDatabaseManager()
- {
- return $this->manager;
- }
- /**
- * Get the current event dispatcher instance.
- *
- * @return \Illuminate\Contracts\Events\Dispatcher|null
- */
- public function getEventDispatcher()
- {
- if ($this->container->bound('events')) {
- return $this->container['events'];
- }
- }
- /**
- * Set the event dispatcher instance to be used by connections.
- *
- * @param \Illuminate\Contracts\Events\Dispatcher $dispatcher
- * @return void
- */
- public function setEventDispatcher(Dispatcher $dispatcher)
- {
- $this->container->instance('events', $dispatcher);
- }
- /**
- * Dynamically pass methods to the default connection.
- *
- * @param string $method
- * @param array $parameters
- * @return mixed
- */
- public static function __callStatic($method, $parameters)
- {
- return static::connection()->$method(...$parameters);
- }
- }
|