私はいくつかの企業をループし、それぞれのためのデータベースを作る必要があるカスタムコンソールコマンドを持っています。このコマンドは現在動作しますが、一度だけ動作します。 2回目のループではマイグレーションは実行されません。したがって、基本的に2つの空のDB(db_on
eとdb_two
)があると、configが実行され、最初にdb_one
のマイグレーションが実行され、ループが再び実行されるときには何も起こりません。db_two
。 DB名をエコーアウトするためにコンソールコマンドを置き換えた場合、両方が返されるので、ループではないことがわかります。また、ループの各接続で使用されるdbをログアウトすると、正しいDBになります。ここでArtisan Call in Loop
はコマンドです:
public function handle()
{
$companies = Company::all();
foreach($companies as $company)
{
\Config::set('database.connections.company.database', $company->db_name);
Artisan::call('migrate', [
'--database' => 'company',
'--path' => 'database/migrations/company',
]);
$this->info( config('database.connections.company.database'));
}
}
ログエラー:
local.ERROR: Database [10_barrel] not configured. {"userId":1,"email":"[email protected]","exception":"[object] (InvalidArgumentException(code: 0): Database [db_2] not configured. at /Users/Sites/cheers/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php:140)
database.phpで
'connections' => [
'main' => [
'driver' => 'mysql',
'host' => env('MAIN_DB_HOST', '127.0.0.1'),
'port' => env('MAIN_DB_PORT', '3306'),
'database' => env('MAIN_DB_DATABASE', 'forge'),
'username' => env('MAIN_DB_USERNAME', 'forge'),
'password' => env('MAIN_DB_PASSWORD', ''),
'unix_socket' => env('MAIN_DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
'company' => [
'driver' => 'mysql',
'host' => env('COMPANY_DB_HOST', '127.0.0.1'),
'port' => env('COMPANY_DB_PORT', '3306'),
'database' => '',
'username' => env('COMPANY_DB_USERNAME'),
'password' => env('COMPANY_DB_PASSWORD'),
'unix_socket' => env('COMPANY_DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
]
ENV:
COMPANY_DB_HOST=127.0.0.1
COMPANY_DB_PORT=3306
COMPANY_DB_USERNAME=root
COMPANY_DB_PASSWORD=
ログファイルにはどのような線量が表示されますか? – Webdesigner
@Webdesignerログ(スタックトレース全体ではありません)で見たトップエラーを追加しました – Packy
このエラーはコマンドの直接の結果ですか? Laraelのバージョンは何ですか? – Webdesigner