master_template/app/Helpers/Installer/DatabaseManager.php

96 lines
2.5 KiB
PHP
Raw Normal View History

2024-06-11 12:16:24 +05:45
<?php
namespace App\Helpers\Installer;
use Exception;
use Illuminate\Database\SQLiteConnection;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\DB;
use Symfony\Component\Console\Output\BufferedOutput;
class DatabaseManager
{
/**
* Migrate and seed the database.
*
* @return array
*/
public function migrateAndSeed()
{
$outputLog = new BufferedOutput;
$this->sqlite($outputLog);
return $this->migrate($outputLog);
}
/**
* Run the migration and call the seeder.
*
* @param \Symfony\Component\Console\Output\BufferedOutput $outputLog
* @return array
*/
private function migrate(BufferedOutput $outputLog)
{
try {
Artisan::call('migrate', ['--force'=> true], $outputLog);
} catch (Exception $e) {
return $this->response($e->getMessage(), 'error', $outputLog);
}
return $this->seed($outputLog);
}
/**
* Seed the database.
*
* @param \Symfony\Component\Console\Output\BufferedOutput $outputLog
* @return array
*/
private function seed(BufferedOutput $outputLog)
{
try {
Artisan::call('db:seed', ['--force' => true], $outputLog);
} catch (Exception $e) {
return $this->response($e->getMessage(), 'error', $outputLog);
}
return $this->response(trans('installer_messages.final.finished'), 'success', $outputLog);
}
/**
* Return a formatted error messages.
*
* @param string $message
* @param string $status
* @param \Symfony\Component\Console\Output\BufferedOutput $outputLog
* @return array
*/
private function response($message, $status, BufferedOutput $outputLog)
{
return [
'status' => $status,
'message' => $message,
'dbOutputLog' => $outputLog->fetch(),
];
}
/**
* Check database type. If SQLite, then create the database file.
*
* @param \Symfony\Component\Console\Output\BufferedOutput $outputLog
*/
private function sqlite(BufferedOutput $outputLog)
{
if (DB::connection() instanceof SQLiteConnection) {
$database = DB::connection()->getDatabaseName();
if (! file_exists($database)) {
touch($database);
DB::reconnect(Config::get('database.default'));
}
$outputLog->write('Using SqlLite database: '.$database, 1);
}
}
}