繁体   English   中英

Laravel - 如何在数据库连接字符串中设置附加参数?

[英]Laravel - How to set additional parameters in database connection string?

我目前正在将遗留系统迁移到 laravel,并且在连接到数据库时遇到了有关使用其他参数的问题。

以下是当前代码:

try {
    $dns = "pgsql:host=<HOST>;port=<NUMBER_PORT>;dbname=<DB_NAME>";
    $options = [PDO::ATTR_PERSISTENT => true];
    $this->driver = new PDO($dns, <DB_USERNAME>, <DB_PASSWORD>, $options);
    
    $this->driver->query("SET app.current_tenant = {<TENANT_ID>}");
    $this->driver->query("SET app.current_institution = {<INSTITUTION_ID>}");

    $this->driver->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo $e->getMessage();
}

我的问题是:连接到 Laravel 中的数据库时如何设置app.current_tenantapp.current_institution参数。

一种方法是实现你自己的数据库连接类,重写connect()方法来做你想做的事。 在一个非常基本的层面上,这可能看起来像这样:

应用程序/数据库/PostgresConnector.php

<?php

namespace App\Database;

use Illuminate\Database\Connectors\PostgresConnector as BaseConnector;

class PostgresConnector extends BaseConnector
{
    public function connect(array $config)
    {
        $pdo = parent::connect($config);
        $pdo->query("SET app.current_tenant = {<TENANT_ID>}");
        $pdo->query("SET app.current_institution = {<INSTITUTION_ID>}");

        return $pdo;
    }
}

然后您可以编写一个服务提供者来使用您的自定义连接器而不是默认连接器。 app/Providers/DatabaseConnectorProvider.php

<?php

namespace App\Providers;

use App\Database\PostgresConnector;
use Illuminate\Support\ServiceProvider;

class DatabaseConnectorProvider extends ServiceProvider
{
    public function register()
    {
        $this->app->bind('db.connector.pgsql', PostgresConnector::class);
    }
}

最后,确保您的服务提供者被加载到config/app.php的 providers 数组中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM