laravie/dhosa

Hot Swapping for Laravel Eloquent
62,210 4
Install
composer require laravie/dhosa
Latest Version:v1.1.0
PHP:>=7.3
Laravel:6 · 7 · 8
License:MIT
Last Updated:Mar 13, 2022
Links: GitHub  ·  Packagist
Maintainer: crynobone

Hot Swapping for Laravel Eloquent

Build Status Latest Stable Version Total Downloads Latest Unstable Version License

Dhosa allows developers to implement hot-swapping capabilities on Eloquent models. This will helps package developer to create a base model and app developer can extends upon the base model while making sure that all the relationship uses the proper model.

Installation

To install through composer, run the following command from terminal:

composer require "laravie/dhosa"

Usages

Enable Hot-Swap

To enable hot-swap to any Eloquent all you need to do is use Laravie\Dhosa\Concerns\Swappable and implements the method.

<?php

namespace App\Models;

// ...
use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravie\Dhosa\Concerns\Swappable;

class User extends Authenticatable
{
    use Swappable;
    
    /**
     * Get Hot-swappable alias name.
     *
     * @return string
     */
    public static function hsAliasName(): string
    {
        return 'User';
    }
}

Registering Hot-Swap

use Laravie\Dhosa\HotSwap;

HotSwap::register('Orchestra\Model\User');

Overriding Hot-Swap

In the App\Providers\AppServiceProvider we can now override the resolution of User to App\User by adding:

use Laravie\Dhosa\HotSwap;

HotSwap::override('User', 'App\User');

Defining relationship

You can define relationship by using the following code:

use Orchestra\Model\User;

/* ... */

public function user() 
{
    return $this->belongsTo(User::hsFinder());
}

Making queries

use Orchestra\Model\User;

$user = User::hs(); // return instance of App\User

$user = User::hs()->query(); // return a query builder for App\User

$user = User::hsOn('api'); // return a query builder for App\User using `api` db connection.

$user = User::hsOnWriteConnection(); // return a query builder for App\User using write PDO connection.

Helpers methods

use Orchestra\Model\Role;
use Orchestra\Model\User;

User::hsAliasName(); // return "User"

User::hsFinder(); // return "App\User"

Role::hsFinder(); // return "Orchestra\Model\Role"

Related Packages

doctrine/dbal

Powerful PHP database abstraction layer (DBAL) with many features for database s...

644,549,754 9,698
laravel/framework

The Laravel Framework.

598,760,099 34,966
laravel/tinker

Powerful REPL for the Laravel framework.

507,193,856 7,441
laravel/serializable-closure

Laravel Serializable Closure provides an easy and secure way to serialize closur...

423,477,751 607
nunomaduro/collision

Cli error handling for console/command-line PHP applications.

403,217,078 4,664

Version History

Version Released PHP Laravel License
v1.1.0 >=7.3 ^6.0 || ^7.0 || ^8.0 MIT
v1.0.0 >=7.2 ^6.0 || ^7.0 MIT