Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 37 additions & 30 deletions src/Commands/DatabaseCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,58 +11,65 @@

namespace BlitzPHP\Database\Commands;

use BlitzPHP\Autoloader\Autoloader;
use BlitzPHP\Cli\Console\Command;
use BlitzPHP\Cli\Console\Console;
use BlitzPHP\Contracts\Autoloader\LocatorInterface;
use BlitzPHP\Contracts\Container\ContainerInterface;
use BlitzPHP\Contracts\Database\ConnectionResolverInterface;
use BlitzPHP\Database\Connection\BaseConnection;
use Psr\Log\LoggerInterface;
use RuntimeException;
use BlitzPHP\Database\DatabaseManager;
use BlitzPHP\Database\Migration\Runner;

/**
* @property BaseConnection $db
*/
abstract class DatabaseCommand extends Command
{
/**
* {@inheritDoc}
*/
protected string $group = 'Base de données';

/**
* {@inheritDoc}
*/
protected string $service = 'Service de gestion de base de données';

private ?BaseConnection $_db = null;
protected ConnectionResolverInterface $resolver;

public function __construct(protected ConnectionResolverInterface $resolver)
public function __construct(protected ContainerInterface $container)
{
$this->resolver = $container->get(ConnectionResolverInterface::class);
}

public function __get($name)
protected function db(array|string|null $group = null, bool $shared = true): BaseConnection
{
if (method_exists($this, $name)) {
return call_user_func([$this, $name]);
}

return parent::__get($name);
return $this->resolver->connect($group, $shared);
}

public function __set($name, $value)
/**
* Recupere les informations a utiliser pour la connexion a la base de données
*
* @return array [group, configuration]
*/
public function connectionInfo(array|string|null $group = null): array
{
if (property_exists($this, $name = '_' . $name)) {
$this->{$name} = $value;
} else {
throw new RuntimeException();
}
return $this->resolver->connectionInfo($group);
}

protected function db(): BaseConnection
/**
* Recupere une instance de l'executeur de migration
*/
public function runner(string $namespace, ?string $group = null): Runner
{
if (null === $this->_db) {
$this->_db = $this->resolver->connection();
}
$namespaces = match($namespace) {
'ALL' => array_keys($this->container->get(Autoloader::class)->getNamespace()),
default => [$namespace],
};

$locator = $this->container->get(LocatorInterface::class);
$files = [];

return $this->_db;
foreach ($namespaces as $namespace) {
$files[$namespace] = $locator->listNamespaceFiles($namespace, '/Database/Migrations/');
}

return new Runner(
$this->container->get(DatabaseManager::class),
$group,
$files,
);
}
}
Loading