【发布时间】:2018-01-04 14:56:14
【问题描述】:
(当你很累的时候千万不要写软件。否则你会在互联网上问非常好的人来回答非常明显的问题,如果你不累,你不会问,因为原则问题是.. . 琐碎. 大声笑。所以,在这种情况下,我忽略了唯一地重命名备用数据库的连接属性。叹息....)
问题: 我无法让 Laravel 识别对不同连接(数据库)的请求。
据我所知,我已经正确配置了.ENV、config/database.php、config/app.php,并添加了$connection=myconnection给我的模型。
但无论我做什么,Laravel/Eloquent/Doctrine 都会忽略所有让某些模型使用默认(通用)数据库,而其他模型使用多租户数据库的尝试。
让我们区分物理服务器、在该服务器上运行的数据库服务器实例、该实例中的数据库以及该数据库中的多租户。
我应该能够通过在运行时修改连接来使用这些配置中的任何一个:
- 单应用/数据库服务器、单应用、单数据库、多租户
- 单个应用/数据库服务器、单个应用、多个数据库、多租户
- 单个应用程序/数据库服务器、单个应用程序、多个数据库实例,每个实例具有多个数据库,具有多租户
- 单个应用服务器、多个数据库服务器、多个数据库实例,每个实例都有多个租户。
- 多个应用服务器、多个数据库服务器、多个数据库实例,每个实例都有多个租户。
- 及其任意组合。
我怀疑缺少文档,但包含 eloquent/model 功能“$connection=connection_configuration”意味着有一个我不直观的相当明显的解决方案。 (而且我没有几天的空闲时间来研究源代码并弄清楚那里发生了什么。)
感谢您的帮助。 -干杯
===环境文件===
DB_CONNECTION=crunch
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=crunch
DB_USERNAME=myapp
DB_PASSWORD=Nonsense!Talk
DB_CONNECTION=munchdata
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=munchdata
DB_USERNAME=myapp
DB_PASSWORD=Nonsense!Talk
===CONFIG/DATABASE.PHP===
'connections' => [
'crunch' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'crunch'),
'username' => env('DB_USERNAME', 'crunch'),
'password' => env('DB_PASSWORD', 'Nonsense!Talk'),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
'sticky' => true,
],
'munchdata' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'munchdata'),
'username' => env('DB_USERNAME', 'munchdata'),
'password' => env('DB_PASSWORD', 'Nonsense!Talk'),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
'sticky' => true,
],
],
===CONFIG/APP.PHP 文件===
'default' => env('DB_CONNECTION', 'crunch'),
// 默认连接工作正常
===模型===
class EntityType extends BaseModel
{
use SoftDeletes;
public $connection = 'munchdata';
public $table = 'entity_type';
( ... )
}
// 忽略$connection
===控制台===
>>> DB::connection('crunch')->getDatabaseName()
=> "crunch"
// 使用默认连接
>>> DB::connection('munchdata')->getDatabaseName()
=> "crunch"
>>>
// 忽略连接
$result = DB::connection('munchdata')->select('select * from entity_type');
// 忽略连接,从默认数据库返回数据
$result = DB::connection('munchdata')->select('select munchdata.entity_type.* from munchdata.entity_type');
// 忽略连接,但仍然返回正确的数据....
【问题讨论】:
-
你正在重新声明
DB_CONNECTION和所有东西......使用DB_CONNECTION_1和DB_CONNECTION_2或其他东西 -
是的,谢谢。我假设 .ENV 文件被加载到一个数组中,并且每个连接名称都充当一个键,就像其他所有东西一样。我没有意识到这只是一个“愚蠢”的文本文件。