laravie / dhosa
Hot Swapping for Laravel Eloquent
Fund package maintenance!
Liberapay
paypal.me/crynobone
Installs: 54 617
Dependents: 1
Suggesters: 0
Security: 0
Stars: 4
Watchers: 2
Forks: 4
Open Issues: 1
Requires
- php: >=7.3
- illuminate/database: ^6.0 || ^7.0 || ^8.0
Requires (Dev)
- laravel/legacy-factories: ^1.0.4
- orchestra/canvas: ^4.5 || ^5.0 || ^6.0
- orchestra/support-core: ^4.0 || ^5.0 || ^6.0
- orchestra/testbench: ^4.8 || ^5.2 || ^6.0
This package is auto-updated.
Last update: 2024-10-24 12:34:33 UTC
README
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"