maduser/argon-eloquent

Eloquent ORM integration for the Argon runtime stack.

Maintainers

Package info

github.com/judus/argon-eloquent

pkg:composer/maduser/argon-eloquent

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-05-25 16:07 UTC

This package is auto-updated.

Last update: 2026-05-25 16:17:39 UTC


README

PHP Build codecov Psalm Level Latest Version Total Downloads License: MIT

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\Container
  • Illuminate\Events\Dispatcher
  • Illuminate\Database\Capsule\Manager
  • Illuminate\Database\DatabaseManager
  • Illuminate\Database\ConnectionResolverInterface
  • Maduser\Argon\Eloquent\EloquentConnectionRegistry
  • Maduser\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