我想知道所有提供数据库连接,数据处理和其他功能的SQL查询位于何处。我试图深入研究Laravel源代码,但发现的只是Laravel方法。我知道这是没有用的,但也很有趣。
答案 0 :(得分:1)
您不必直接弄乱SQL。这是Laravel的功能。如果您对此感到好奇,请从第101行开始在建立连接中建立数据库连接(如果您尚未发布供应商文件)/vendor/laravel/framework/src/Illuminate/DataBaseManger.php
在其中:
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(...)
在Illuminate/Database/Connection
的第330行执行已构建的PDO语句。
答案 1 :(得分:0)
SQL连接位于项目根目录中的.env文件中。如果要覆盖.env中的连接,则可以在项目根目录中的config > database.php
中进行设置。
答案 2 :(得分:0)
如果要查看查询的构建方式,只需查找Builder.php
文件夹中的文件vendor\laravel\framework\src\Illuminate\Database\Query
。
然后,您可以检查Query
文件夹中的所有其他文件,以查看雄辩的查询中正在发生的事情。
您将无需触摸这些文件,只需使用 documentation了解如何使用查询生成器。