maduser / argon-eloquent
Eloquent ORM integration for the Argon runtime stack.
Requires
- php: ^8.2
- illuminate/database: ^12.0
- illuminate/events: ^12.0
- maduser/argon-container: ^1.0
Requires (Dev)
- dealerdirect/phpcodesniffer-composer-installer: ^1.1
- phpunit/phpunit: ^11.5
- slevomat/coding-standard: ^8.24
- squizlabs/php_codesniffer: ^4.0
- vimeo/psalm: ^6.13
README
Eloquent ORM integration for the Argon runtime stack.
Installation
composer require maduser/argon-eloquent
Registration
Register the provider in your application composition layer:
use Maduser\Argon\Eloquent\Provider\EloquentServiceProvider; $container->register(EloquentServiceProvider::class);
The provider registers:
Illuminate\Container\ContainerIlluminate\Events\DispatcherIlluminate\Database\Capsule\ManagerIlluminate\Database\DatabaseManagerIlluminate\Database\ConnectionResolverInterfaceMaduser\Argon\Eloquent\EloquentConnectionRegistryMaduser\Argon\Eloquent\Config\EloquentConfig
Existing container definitions are not replaced.
Connections
Add database connections during service-provider registration:
use Maduser\Argon\Container\AbstractServiceProvider; use Maduser\Argon\Container\ArgonContainer; use Maduser\Argon\Eloquent\EloquentConnectionRegistry; final class DatabaseServiceProvider extends AbstractServiceProvider { #[\Override] public function register(ArgonContainer $container): void { $registry = $container->get(EloquentConnectionRegistry::class); $registry->add('default', [ 'driver' => 'sqlite', 'database' => dirname(__DIR__) . '/storage/database.sqlite', 'prefix' => '', ]); $registry->add('analytics', [ 'driver' => 'mysql', 'host' => '127.0.0.1', 'database' => 'analytics', 'username' => 'app', 'password' => '', 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', ]); } }
The default connection name is default. Configure another default explicitly:
use Maduser\Argon\Eloquent\Config\EloquentParameter; $container->getParameters()->set(EloquentParameter::DEFAULT_CONNECTION, 'analytics');
Boot Behavior
The provider registers services during register() and boots Eloquent during boot().
That means connection providers should add connections in register(), before the application calls $container->boot(). This keeps the binding graph explicit and still allows Eloquent to perform its required runtime setup.
By default, model events are enabled and Capsule is not registered globally:
use Maduser\Argon\Eloquent\Config\EloquentParameter; $parameters = $container->getParameters(); $parameters->set(EloquentParameter::BOOT_EVENTS, true); $parameters->set(EloquentParameter::GLOBAL, false);
EloquentParameter::GLOBAL calls Capsule's setAsGlobal() during boot. Leave it disabled unless the application explicitly needs Capsule's static API.
Usage
Inject Illuminate's own database services:
use Illuminate\Database\DatabaseManager; final readonly class UserRepository { public function __construct( private DatabaseManager $database, ) { } public function count(): int { return $this->database->connection()->table('users')->count(); } }
Eloquent models work after container boot:
use Illuminate\Database\Eloquent\Model; final class User extends Model { protected $table = 'users'; }
Boundaries
This package only wires Eloquent into Argon. It does not provide migrations, model discovery, database config loading, transactions helpers, repositories, or an Argon ORM abstraction.
Quality Gates
composer check composer test:coverage composer psalm composer phpcs