Я пытаюсь написать консольную команду в Laravel 5.4, которая позволит мне динамически создавать файл .env, а затем запускать миграции и сеялки базы данных.
/**
* Execute the console command.
*
* @return mixed
*/
public function handle() {
// Check if we already have an .env file.
if(!$this->envFileExists()) {
// Create the .env file
$this->createEnvFile();
$this->info('Environment file successfully created.');
}
// Generate application key
Artisan::call('key:generate');
$this->info('Application key successfully generated.');
// Migrate
Artisan::call('migrate:install');
$this->info('Migrations table successfully created.');
Artisan::call('migrate:refresh');
$this->info('All tables successfully migrated.');
// Seed
Artisan::call('db:seed');
$this->info('All tables successfully seeded.');
}
Код успешно создает файл .env И генерирует и сохраняет ключ приложения, но не может перенести базу данных.
[PDOException] SQLSTATE[HY000] [1045] Access denied for user 'forge'@'localhost' (using password: NO)
Я предполагаю, что это означает, что приложение НЕ читает файл .env после его создания, даже если оно правильно создает ключ приложения в правильном файле.
Если я запускаю команду во второй раз после того, как файл .env уже существует, все работает правильно: база данных переносится и заполняется. Итак, ясно, что файл .env создается правильно и что Laravel по какой-то причине просто не распознает его при первоначальной установке.
Как я могу заставить Laravel использовать новый файл .env после его создания?