postgresql 尝试在Laravel 9中使用一个代码用于多个数据库

tyu7yeag  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(128)

我试图为laravel 9中的每个餐厅创建一个数据库。基本上当管理员添加一个新的客户端时。代码会自动为该客户端创建一个新的数据库,然后为新的数据库运行迁移,创建用户.当用户登录时,我们检查它属于哪个客户端,然后登录到相关的数据库.基本上一个代码无限的数据库.我写的代码动态连接到多个数据库中php,但从来没有在laravel。
误差
尝试创建新数据库时调用未定义的方法Illuminate\Database\PostgresConnection::getConnection()。

private function createDB($dbName)
{
    try {
        $outputLog = '';
        DB::getConnection()->statement("CREATE DATABASE :$dbName", array('schema' => "schema"));
        $this->migrate($outputLog);
    } catch(Exception $e) {
        return $this->response($e->getMessage(), 'error', $outputLog);
    }
    return $this->response('Installation finished', 'success',$outputLog);
}

/// migrate database for new system
private function migrate($outputLog)
{
    try {
        Artisan::call('migrate', ["--force"=> true], $outputLog);
    } catch(Exception $e){
        return $this->response($e->getMessage(), 'error', $outputLog);
    }
    return $this->seed($outputLog);
}
// run seed folder after migration
private function seed($outputLog)
{
    try {
        // Artisan::call('db:seed', ['--force' => true], $outputLog);
        Artisan::call('db:seed', array_filter([
            '--class' => 'Database\\Seeders\\DatabaseSeeder',
            '--force' => true,
        ]));
    } catch(Exception $e) {
        return $this->response($e->getMessage(), 'error', $outputLog);
    }
    return $this->response('Installation finished', 'success', $outputLog);
}

字符串

hgc7kmma

hgc7kmma1#

首先,为每个客户端创建新的数据库并不是一个好方法。将来维护这些数据库将非常复杂。当涉及到你的问题时,你可以尝试这样做:

private function createDB($dbName)
{
    try {
        $outputLog = '';

        DB::statement("CREATE DATABASE $dbName");

        config(['database.connections.pgsql.database' => $dbName]);
        DB::reconnect('pgsql');

        $this->migrate($outputLog);
    } catch(Exception $e) {
        return $this->response($e->getMessage(), 'error', $outputLog);
    }
    return $this->response('Installation finished', 'success', $outputLog);
}

字符串
注意:我假设你使用的是'pgsql'连接名,但如果你使用的是不同的名称,你应该调整它。

相关问题