【发布时间】:2021-02-23 00:05:05
【问题描述】:
在使用 nWidart/laravel-modules 创建的每个模块中都有一个 Config 目录,附带一个 config.php 文件:
<?php
return [
'name' => 'Contracts'
];
现在,文档说明您应该在此目录中编写模块的配置,因此我在其中放置了一个 database.php 文件,其中包含用于我的模块的自定义连接,称为 module1:
<?php
return [
'default' => env('DB_CONNECTION', 'mysql'),
'connections' => [
'module1' => [
'driver' => 'mysql',
'url' => env( 'DATABASE_URL' ),
'host' => env( 'DB_MODULE1_HOST', '127.0.0.1' ),
'port' => env( 'DB_MODULE1_PORT', '3306' ),
'database' => env('DB_MODULE1_DATABASE', 'forge'),
'username' => env( 'DB_MODULE1_USERNAME', 'forge' ),
'password' => env( 'DB_MODULE1_PASSWORD', '' ),
'unix_socket' => env( 'DB_MODULE1_SOCKET', '' ),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded( 'pdo_mysql' ) ?
array_filter( [ PDO::MYSQL_ATTR_SSL_CA => env( 'MYSQL_ATTR_SSL_CA' ), ] ) : [],
],
],
];
在项目根目录下的.env 文件中(因为我不知道如何为我的模块创建自定义环境)我添加了几行:
DB_CONNECTION_MODULE1=module1
DB_MODULE1_DATABASE=module1database
DB_MODULE1_USERNAME=root
DB_MODULE1_PASSWORD=password
例如,我的一个迁移如下所示:
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateObjectivesTable extends Migration{
/**
* Run the migrations.
*
* @return void
*/
public function up(){
Schema::connection( env( 'DB_DATABASE_MODULE1' ) )->create( 'objectives', function( Blueprint $table ){
$table->id();
$table->text( 'description' );
$table->timestamp( 'created_at' )->default( DB::raw( 'CURRENT_TIMESTAMP' ) );
$table->timestamp( 'updated_at' )->default( DB::raw( 'CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP' ) );
} );
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down(){
Schema::connection( env( 'DB_DATABASE_MODULE1' ) )->dropIfExists( 'objectives' );
}
}
我原以为当我运行迁移时,模块的表会在它们自己的数据库 (module1database) 中创建,但它不起作用:
Migrating: 2020_11_10_134237_create_objectives_table
InvalidArgumentException
Database connection [module1] not configured.
at \path\to\my\site\vendor\laravel\framework\src\Illuminate\Database\DatabaseManager.php:152
148▕ // If the configuration doesn't exist, we'll throw an exception and bail.
149▕ $connections = $this->app['config']['database.connections'];
150▕
151▕ if (is_null($config = Arr::get($connections, $name))) {
➜ 152▕ throw new InvalidArgumentException("Database connection [{$name}] not configured.");
153▕ }
154▕
155▕ return (new ConfigurationUrlParser)
156▕ ->parseConfiguration($config);
1 \path\to\my\site\vendor\laravel\framework\src\Illuminate\Database\DatabaseManager.php:115
Illuminate\Database\DatabaseManager::configuration("module1")
2 \path\to\my\site\vendor\laravel\framework\src\Illuminate\Database\DatabaseManager.php:86
Illuminate\Database\DatabaseManager::makeConnection("module1")
我想,我仍然需要阅读Modules\Module1\Config\database.php 的内容,我们将不胜感激。我还希望能够将我的模块的环境包含在模块中(可能类似于\Modules\Module1\.env),这也将不胜感激。
【问题讨论】:
-
迁移有一个可以设置的
protected $connection变量 -
是的,但是我想从\Modules\Module1\Config\database.php 中获取连接信息,如果我使用$connection,它仍然会在\config\database 中查找连接数组。 php 这是我不想做的事
-
所以让它将配置合并到主配置中
-
好的,你能告诉我如何从模块内部做吗?
标签: database laravel module configuration