-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathdatabase.php
195 lines (169 loc) · 4.24 KB
/
database.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
<?php namespace Laravel;
use Closure;
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);
}
/**
* Escape a string for usage in a query.
*
* This uses the correct quoting mechanism for the default database connection.
*
* @param string $value
* @return string
*/
public static function escape($value)
{
return static::connection()->pdo->quote($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);
}
}