Где находится Соединение [сделано]?
Вам не нужно напрямую связываться с SQL.Это особенность Laravel.Если вам любопытно, соединение с базой данных находится (если вы не опубликовали файлы вашего продавца) /vendor/laravel/framework/src/Illuminate/DataBaseManger.php
в подключении, начиная со строки 101, где у нас есть вызов:
return $this->factory->make($config, $name);
Какие вызовы:
return $this->createSingleConnection($config);
Что делает:
$pdo = $this->createPdoResolver($config);
return $this->createConnection(
$config['driver'], $pdo, $config['database'], $config['prefix'], $config
);
Итак, у нас есть объект $ pdo, который передается в createConnection, который делает:
return new MySqlConnector;
Который устанавливает соединение:
public function connect(array $config)
{
$dsn = $this->getDsn($config);
$options = $this->getOptions($config);
// We need to grab the PDO options that should be used while making the brand
// new connection instance. The PDO options control various aspects of the
// connection's behavior, and some might be specified by the developers.
$connection = $this->createConnection($dsn, $config, $options);
if (! empty($config['database'])) {
$connection->exec("use `{$config['database']}`;");
}
$this->configureEncoding($connection, $config);
// Next, we will check to see if a timezone has been specified in this config
// and if it has we will issue a statement to modify the timezone with the
// database. Setting this DB timezone is an optional configuration item.
$this->configureTimezone($connection, $config);
$this->setModes($connection, $config);
return $connection;
}
Но почему это так запутанно и сложно?Потому что вы можете делать сложные вещи, например, иметь «соединение», которое использует одну базу данных для чтения, а другую для записи, или переключаться на другой тип базы данных (может быть, нереляционную базу данных), и вам не нужно беспокоиться об изменении всего своего кода..
И Запрошенные Запросы
Есть два места.Illuminate имеет построитель запросов к базе данных, а Eloquent имеет ORM (который использует QueryBuilder под капотом, я верю. Но выполнение происходит в Illuminate/Query/Builder
get () вызывает защищенный метод runSelect (), который вызывает $this->connection->select(...)
, который выполняет встроенныйОператор PDO в строке 330 из Illuminate/Database/Connection
.