我这里有一点鸡和蛋的问题。我正在 Laravel 中构建一个 Multi-Tenancy 应用程序,其中每个租户在 Postgrsql 服务器上都有自己的数据库。所以我有一个工作来创建一个新的租户,调用:
Schema::connection($this->tenant->getDatabaseConnection())->createDatabase($this->tenant->getDatabaseName())
所以$this->tenant->getDatabaseConnection()
选择要添加租户的租户数据库服务器并返回该服务器的连接名称。然后$this->tenant->getDatabaseName()
将返回该租户的数据库名称字符串。我遇到了一个小问题。这会引发异常:
SQLSTATE[08006] [7] FATAL: database "port=5432" does not exist (SQL: create database "local_tenant_(id)" encoding "utf8")
这是因为默认情况下连接的数据库名称为空。当用户登录到他们的租户时,我们会从租户模型中动态地将 getDatabaseName() 注入(inject)其中。
但我不能在这里这样做,因为租户数据库还不存在。所以这里是我看到的选项:
从技术上讲,您不必选择 DB 即可使用 create DB 命令。这是 Laravel 的 Schema Builder 的一个特性,它尝试在调用方法之前选择一个数据库(在本例中为 CreatedDatabase)。有没有办法解决这个问题,所以我可以在没有 Laravel 首先尝试选择空数据库的情况下创建数据库?
最佳答案
正确的解决方法是连接到postgres
数据库以运行 CREATE DATABASE
. postgres
数据库总是在那里(除非有人丢弃了它),这就是它的设计目的。
关于php - 我可以在不先选择数据库的情况下使用 Laravel 的 Schema::createDatabase() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68359621/