whilesmart / eloquent-assets
Polymorphic asset register (equipment, domains, software, subscriptions) for Laravel applications.
Requires
- php: ^8.2
- laravel/framework: ^11.0|^12.0
- whilesmart/eloquent-files: ^1.0
- whilesmart/eloquent-owner-access: ^1.0
Requires (Dev)
- fakerphp/faker: ^1.24
- laravel/pint: ^1.22
- orchestra/testbench: ^9.0|^10.0
This package is auto-updated.
Last update: 2026-06-11 14:31:41 UTC
README
A polymorphic asset register for Laravel: one model for everything a business owns, whether
physical (equipment, vehicles) or digital (domains, software licenses, subscriptions). Each
asset is scoped to an owner (a workspace, organization, user) through
whilesmart/eloquent-owner-access,
carries a value, and optionally a renewal/expiry date.
Install
composer require whilesmart/eloquent-assets
php artisan migrate
Routes register automatically under the api prefix with auth:sanctum. Set
ASSETS_REGISTER_ROUTES=false to mount them yourself.
Owning model
Add the trait to whatever owns assets:
use Whilesmart\Assets\Traits\HasAssets; class Workspace extends Model { use HasAssets; } $workspace->assets()->create([ 'name' => 'acme.com', 'category' => 'domain', 'value_cents' => 1500, 'currency' => 'USD', 'expires_at' => now()->addYear(), 'renew_interval_months' => 12, 'details' => ['registrar' => 'Namecheap', 'auto_renew' => true], ]);
reference (e.g. AST-00001) is generated per owner when omitted. Category-specific fields
live in the details JSON column; common fields (value, status, expiry) are columns.
Endpoints
| Method | Path | Purpose |
|---|---|---|
| GET | /api/assets |
List (filter by category, status, expiring_within, q) |
| POST | /api/assets |
Create |
| GET | /api/assets/{asset} |
Show |
| PUT/PATCH | /api/assets/{asset} |
Update |
| DELETE | /api/assets/{asset} |
Soft delete |
| POST | /api/assets/{asset}/renew |
Advance expires_at by months (or renew_interval_months) |
| POST | /api/assets/{asset}/retire |
Mark retired |
Renewals
Asset::query()->expiringWithin(30) returns assets due within 30 days. Host apps can run a
scheduled sweep over this scope to send renewal reminders.
Status & category
AssetStatus: in_use, assigned, in_stock, maintenance, expiring, expired,
retired, disposed. AssetCategory lists the suggested categories, but category is a
plain string so new categories need no schema change.