123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- <?php namespace Laravel;
- use Laravel\Database\Expression;
- use Laravel\Database\Connection;
- class Database {
- /**
- * The established database connections.
- *
- * @var array
- */
- public static $connections = array();
- /**
- * The third-party driver registrar.
- *
- * @var array
- */
- public static $registrar = array();
- /**
- * Get a database connection.
- *
- * If no database name is specified, the default connection will be returned.
- *
- * <code>
- * // Get the default database connection for the application
- * $connection = DB::connection();
- *
- * // Get a specific connection by passing the connection name
- * $connection = DB::connection('mysql');
- * </code>
- *
- * @param string $connection
- * @return Database\Connection
- */
- public static function connection($connection = null)
- {
- if (is_null($connection)) $connection = Config::get('database.default');
- if ( ! isset(static::$connections[$connection]))
- {
- $config = Config::get("database.connections.{$connection}");
- if (is_null($config))
- {
- throw new \Exception("Database connection is not defined for [$connection].");
- }
- static::$connections[$connection] = new Connection(static::connect($config), $config);
- }
- return static::$connections[$connection];
- }
- /**
- * Get a PDO database connection for a given database configuration.
- *
- * @param array $config
- * @return PDO
- */
- protected static function connect($config)
- {
- return static::connector($config['driver'])->connect($config);
- }
- /**
- * Create a new database connector instance.
- *
- * @param string $driver
- * @return Database\Connectors\Connector
- */
- protected static function connector($driver)
- {
- if (isset(static::$registrar[$driver]))
- {
- $resolver = static::$registrar[$driver]['connector'];
- return $resolver();
- }
- switch ($driver)
- {
- case 'sqlite':
- return new Database\Connectors\SQLite;
- case 'mysql':
- return new Database\Connectors\MySQL;
- case 'pgsql':
- return new Database\Connectors\Postgres;
- case 'sqlsrv':
- return new Database\Connectors\SQLServer;
- default:
- throw new \Exception("Database driver [$driver] is not supported.");
- }
- }
- /**
- * Begin a fluent query against a table.
- *
- * @param string $table
- * @param string $connection
- * @return Database\Query
- */
- public static function table($table, $connection = null)
- {
- return static::connection($connection)->table($table);
- }
- /**
- * Create a new database expression instance.
- *
- * Database expressions are used to inject raw SQL into a fluent query.
- *
- * @param string $value
- * @return Expression
- */
- public static function raw($value)
- {
- return new Expression($value);
- }
- /**
- * Get the profiling data for all queries.
- *
- * @return array
- */
- public static function profile()
- {
- return Database\Connection::$queries;
- }
-
- /**
- * Get the last query that was executed.
- *
- * Returns false if no queries have been executed yet.
- *
- * @return string
- */
- public static function last_query()
- {
- return end(Database\Connection::$queries);
- }
- /**
- * Register a database connector and grammars.
- *
- * @param string $name
- * @param Closure $connector
- * @param Closure $query
- * @param Closure $schema
- * @return void
- */
- public static function extend($name, Closure $connector, $query = null, $schema = null)
- {
- if (is_null($query)) $query = '\Laravel\Database\Query\Grammars\Grammar';
- static::$registrar[$name] = compact('connector', 'query', 'schema');
- }
- /**
- * Magic Method for calling methods on the default database connection.
- *
- * <code>
- * // Get the driver name for the default database connection
- * $driver = DB::driver();
- *
- * // Execute a fluent query on the default database connection
- * $users = DB::table('users')->get();
- * </code>
- */
- public static function __callStatic($method, $parameters)
- {
- return call_user_func_array(array(static::connection(), $method), $parameters);
- }
- }
|