首页 > 解决方案 > Laravel 动态更改模式

问题描述

我正在使用 laravel 5.8 和 postgres 开发一个项目。我有一个主数据库,一个包含主数据的全局模式和每个组织的其他模式。具有主数据的架构是默认连接。我正在尝试在每个架构中搜索特定的电话号码并返回电话号码出现的所有架构名称。我的第一次尝试是这样,但架构不会从默认架构切换并且搜索不会发生。

我的代码如下所示:

public function authenticate(Request $request)
    {

        $phone_number = $request->get('phone_number');

        $facilities = Facility::all();

        foreach($facilities as $facility) {

            $params = $facility['schema_name'];

            $connection = DatabaseConnection::setConnection($params);

            $fac = Patient::where(function ($query) use ($phone_number) {
                $query->where('phone_number', '=', $phone_number);
            });

            $facility = $fac;

        }       

        return response()->json(compact('token', 'connection', 'facility'));
    }

我有一个辅助函数,看起来像这样:

public static function setConnection($params)
    {
        config(['database.connections.onthefly' => [
        
            'driver' => 'pgsql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '5432'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
            'prefix_indexes' => true,
            'schema' => $params,
            'sslmode' => 'prefer',
        ]]);

        return DB::connection('onthefly');
    }

DB::statement("SET search_path TO $params");在尝试不起作用的辅助函数之前,我还尝试使用切换模式。

任何关于如何动态切换模式的建议/参考将不胜感激。

标签: phplaravelpostgresqleloquent

解决方案


推荐阅读