Laravel 在每次请求时连接到数据库。我怎样才能阻止这个?
Laravel connects to the database on every request. How can I stop this?
我正在使用 Laravel 5,我注意到在每次加载页面时,laravel 都会尝试连接到数据库。您可以通过为默认数据库设置无效凭据来检查此行为。每次加载页面时都会出现错误,因此这意味着 Laravel 尝试连接到数据库。这甚至发生在维护模式页面上。
这是为什么?有什么可以阻止 Laravel 这样做的吗?不查询数据库的页面无需连接数据库。
发生这种情况是因为 Laravel 的方式已经建成。它的内部流程确保您以后需要时可以使用数据库。
我会做以下事情:
'driver' => 'sqlite',
以及 sqlite 连接设置
'sqlite' => [
'driver' => 'sqlite',
'database' => ':memory:',
'prefix' => '',
]
这样,它将使用内存数据库,当数据库连接关闭时数据库将不复存在,并且由于您不会打开连接,因此您永远不会拥有本地数据库打开。
Laravel 仅在第一次需要数据库时实际连接到数据库。通常,这是您第一次查询数据库。如果您从不查询数据库,它就永远不会尝试连接到它。
这有点简化。您可能有一些自定义代码出于某种原因检查与数据库的连接,并且需要连接到它,但这是一种不太常见的情况,您可能会知道它。
如果您的应用程序在每次页面加载时都连接到数据库,这意味着您正在尝试 运行 在每次页面加载时进行查询。这可能意味着您在中间件、服务提供商甚至您的路由文件中有一个查询 运行。
如果您启用了调试,PDOExecption 从您的无效密码中提供的堆栈跟踪应指向正在尝试的查询,以及它运行 的来源。
我正在使用 Laravel 5,我注意到在每次加载页面时,laravel 都会尝试连接到数据库。您可以通过为默认数据库设置无效凭据来检查此行为。每次加载页面时都会出现错误,因此这意味着 Laravel 尝试连接到数据库。这甚至发生在维护模式页面上。
这是为什么?有什么可以阻止 Laravel 这样做的吗?不查询数据库的页面无需连接数据库。
发生这种情况是因为 Laravel 的方式已经建成。它的内部流程确保您以后需要时可以使用数据库。
我会做以下事情:
'driver' => 'sqlite',
以及 sqlite 连接设置
'sqlite' => [
'driver' => 'sqlite',
'database' => ':memory:',
'prefix' => '',
]
这样,它将使用内存数据库,当数据库连接关闭时数据库将不复存在,并且由于您不会打开连接,因此您永远不会拥有本地数据库打开。
Laravel 仅在第一次需要数据库时实际连接到数据库。通常,这是您第一次查询数据库。如果您从不查询数据库,它就永远不会尝试连接到它。
这有点简化。您可能有一些自定义代码出于某种原因检查与数据库的连接,并且需要连接到它,但这是一种不太常见的情况,您可能会知道它。
如果您的应用程序在每次页面加载时都连接到数据库,这意味着您正在尝试 运行 在每次页面加载时进行查询。这可能意味着您在中间件、服务提供商甚至您的路由文件中有一个查询 运行。
如果您启用了调试,PDOExecption 从您的无效密码中提供的堆栈跟踪应指向正在尝试的查询,以及它运行 的来源。