Где SQL-соединение и запросы реализованы в Laravel? - PullRequest
0 голосов
/ 26 апреля 2019

Интересно, где находятся все эти SQL-запросы, которые обеспечивают соединение с базой данных, управление данными и другие. Я пытался глубже и глубже погрузиться в исходный код Laravel, но все, что я нашел, это только методы Laravel. Я знаю, что это очень бесполезно, но также очень интересно знать.

Ответы [ 3 ]

1 голос
/ 26 апреля 2019

Где находится Соединение [сделано]?

Вам не нужно напрямую связываться с 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.

0 голосов
/ 26 апреля 2019

Если вы хотите увидеть, как строятся запросы, просто найдите файл Builder.php, расположенный в папке vendor\laravel\framework\src\Illuminate\Database\Query.

Затем вы можете проверить все остальные файлы в папке Query, чтобы увидетьчто происходит в ваших красноречивых запросах.

Вам никогда не придется прикасаться к этим файлам, просто используйте документацию , чтобы узнать, как использовать Query Builder.

0 голосов
/ 26 апреля 2019

Соединение SQL находится в файле .env в корневом каталоге вашего проекта. Если вы хотите переопределить соединение из .env, вы можете установить config > database.php в корневом каталоге проекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...