【发布时间】:2021-05-21 05:03:50
【问题描述】:
有没有办法改变 Laravel DB 连接,比如通过 API 调用,并且在 API 调用之前和之后返回的数据对于每个模型都会不同?
粗略的概念是:
我有 2 个数据库,比如 first_database 和 second_database,一个名为 mysql 的连接,以及一个用于更改连接数据库的 API。每次调用该 API 时,mysql 连接的数据库都会根据给定的参数进行更改。之后,当我得到模型的数据时,它会有所不同,因为它有不同的数据库。
有没有办法尽可能高效地做到这一点?我调查过:
DB::connection('...')->select('...')
,
config()->set('database.connection', 'second_mysql')(我尝试使用不同的连接)
和$models = new Model(); $models->setConnection('second_mysql');。
DB::connection('...')->select('...') 和$models = new Model(); $models->setConnection('second_mysql'); 在我看来都不是很有效,因为我有很多模型/表格,我不想更改它们的每一个连接,所以这两个将是我最后的手段。我尝试的是config()->set('database.connection', 'second_mysql'),它有效,但也无效。它之所以有效,是因为当我运行此代码时:
config()->set('database.connection', 'second_mysql');
dd(Item::all());
(我有 items 表,对于 first_database 它有 3 条记录,对于 second_database 有 0 条记录)
它返回 null(这有效)。但是,当我运行 config()->... 部分并将所有 items 作为 2 个不同的 API 时,获取所有 items API 从 first_database 返回 3 条记录(这不起作用)。
这种方法有什么问题吗?或者我需要其他方法吗?
我会留下我不工作的代码以防万一:
- API method for changing connections(当我通过 1 时转储返回 second_mysql)
- API method to get all items(即使我调用了上面的 API,转储也返回 mysql)
【问题讨论】:
-
这也没有得到我想要的,因为当我更改连接时,我必须更改我拥有的每个模型。
标签: php mysql laravel frameworks